2013-03-14 16 views
0

Salut les gars, je suis nouveau pour les scripts, je fais un petit projet en python et wxpython, qui fait l'automatisation. Maintenant, j'ai un problème lors de l'envoi de variable de Python au script shell. Je dois connecter ftp, puis télécharger un fichier qui est écrit en BASH (1er script). Ce script bash appelle un autre script bash (2ème script) qui se trouve également dans le serveur ftp. MAIS le nom du script 2 n'est pas codé en dur dans le 1er script. donc je dois envoyer ce "nom de script" de mon script python que je ne suis pas capable de faire maintenant. alors j'ai besoin de votre aide pour résoudre mon problème, je suis passé par google mais je n'ai rien trouvé.passer une variable de python à shell script

Merci d'avance.

J'ai essayé directement de l'exécuter mais il ne prend toujours pas le 2ème argument, donc j'ai passé par le script une fois. a constaté que,

quand 2 $ 3 $ 7 $ déjà configuré dans le 1er scénario (ce sont intégrés dans myproject.sh)

s'il vous plaît me aider à résoudre ce problème ..

+0

$ comment êtes-vous exécuter votre script bash à partir de python? Utilisez-vous system()? –

+0

Non. J'utilise le sous-processus – biz

+0

La réponse à ce jour est très bonne. Mais vous pouvez également simplement ajouter un argument de ligne de commande à votre premier script. Alors le nom du 2ème script bash serait juste $ 1 dans votre script bash (en supposant que vous n'avez pas d'autres arguments de ligne de commande) –

Répondre

0

Vous pouvez utiliser des arguments de ligne de commande. Puisque vous utilisez subprocess pour appeler le premier script bash, vous pouvez le modifier pour ressembler à ceci:

subprocess.call(["bashScript1Name", "bashScript2Name"]) 

Puis, en bashScript1Name le nom du second script dans la variable 1

+0

L'utilisateur de bashScript2Name devrait entrer Je ne peux pas le coder en dur pour des raisons de sécurité :( – biz

+0

Eh bien, dans cet exemple l'utilisateur pourrait encore entrer en python, alors vous pourriez exécuter cette commande avec la variable Mais malheureusement, mon exemple ne fonctionnerait toujours pas si la sécurité est ce que vous cherchez Le nom du script du second bash sera visible pendant que le premier script est en cours d'exécution avec ps (ou d'autres méthodes après qu'il a fini à un utilisateur qui sait ce qu'ils font et peut être root.) Pour autant que je sache, il n'y a pas de moyen facile d'obtenir des informations cachées à un script bash –

+0

@ Memento Mori pouvons-nous faire un script bash pour prendre des arguments python? – biz

0

Le moyen le plus rapide et le plus facile est pour laisser votre script Python créer un fichier qui définit un nom de variable en utilisant la syntaxe bash, puis laissez votre script bash le source. Sourcing il va essentiellement définir cette variable.

Ainsi en Python, vous voulez afficher ce fichier quelque part:

name_of_script="/path/to/second/script.sh" 

with open("/my/path/scriptnamevar.sh", "w") as f: 
    #Output to bash-recognized variable setting syntax 
    f.write("SCRIPT_NAME={}".format(name_of_script)) 

Ensuite, dans votre premier script, il vous suffit de la source scriptnamevar.sh (ou tout ce que vous décidez de l'appeler).

source /my/path/scriptnamevar.sh 

# This should output whatever name_of_script was in python 
echo $SCRIPT_NAME 
+0

@ jordan Je n'ai pas compris ce que vous avez dit, pouvez-vous expliquer ou avoir des liens utiles ? – biz

+0

@ jordan @nd script est l'utilisateur devrait entrer donc j'ai utilisé TextCtrl dans l'interface graphique afin qu'il prenne de la valeur à partir de l'interface graphique. – biz

+0

@ jordan Je ne peux pas le coder en dur pour raison de sécurité – biz

Questions connexes