J'ai ce code:
opts.info("Started domain %s (id=%d)" % (dom, domid))
Je souhaite exécuter un script Shell avec le paramètre domid
ci-dessus ..__
subprocess.call(['test.sh %d', domid])
Comment ça marche?
Je l'ai essayé avec:
subprocess.call(['test.sh', domid])
Mais je reçois cette erreur:
File "/usr/lib/xen-4.1/bin/xm", line 8, in <module>
main.main(sys.argv)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 3983, in main
_, rc = _run_cmd(cmd, cmd_name, args)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 4007, in _run_cmd
return True, cmd(args)
File "<string>", line 1, in <lambda>
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/main.py", line 1519, in xm_importcommand
cmd.main([command] + args)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1562, in main
dom = make_domain(opts, config)
File "/usr/lib/xen-4.1/bin/../lib/python/xen/xm/create.py", line 1458, in make_domain
subprocess.call(['test.sh', domid])
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
TypeError: execv() arg 2 must contain only strings
Comme ça ?
subprocess.call(['test.sh', str(domid)])
La documentation est disponible sur le site de python
Vince,
Je cherchais aussi à faire la même chose que ce post. Exécuter un script shell à partir de python avec variable (avec variable, je pense que cela signifie avec un argument en ligne de commande).
J'ai fait ce qui suit pour obtenir les résultats. Je partage au cas où d'autres personnes cherchent la même réponse.
import os arglist = 'arg1 arg2 arg3' bashCommand = "/ bin/bash script.sh" + liste_éclair os.system (bashCommand)
qui a bien fonctionné pour moi.
J'ai également, après plus de lecture, suggéré qu'il serait préférable d'utiliser subprocess.Popen si vous souhaitez récupérer les résultats à des fins d'affichage. Je connecte tout dans un autre fichier avec le script bash, je n'ai donc pas vraiment besoin de sous-processus.
J'espère que ça aide.
import os os.system ("cat /root/test.sh") #!/bin/bash x = '1' tandis que [[$ x -le 10]]; faire echo $ x: hello $ 1 $ 2 $ 3 dormir 1 x = $ (($ x + 1)) terminé arglist = 'arg1 arg2 arg3' bashCommand = 'bash /root/test.sh' + liste_glish os.system (bashCommand) 1: bonjour arg1 arg2 arg3 2: bonjour arg1 arg2 arg3 3: bonjour arg1 arg2 arg3 4: bonjour arg1 arg2 arg3 5: bonjour arg1 arg2 arg3
Une solution simple à retenir:
import os
bashCommand = "source script.sh"
os.system(bashCommand)
Vous devez appeler le script Shell de la manière suivante à partir de votre script Python:
subprocess.call(['test.sh', domid])
Reportez-vous à ici pour la documentation du module de sous-processus. Dans le script ci-dessus, nous passons une liste à la méthode call
où le premier élément est le programme à exécuter et les éléments restants dans la liste sont les arguments du programme.