Exécuter le script shell à partir de python avec variable
J'ai ce code:
opts.info("Started domain %s (id=%d)" % (dom, domid))
Je veux exécuter un script shell avec le paramètre domid
à partir de ci-dessus.
Quelque chose comme ceci:
subprocess.call(['test.sh %d', domid])
Comment ça fonctionne?
Je l'ai essayé avec:
subprocess.call(['test.sh', domid])
Mais j'obtiens 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
source d'informationauteur Vince
Vous devez vous connecter pour publier un commentaire.
Comme ça ?
De la Documentation est disponible sur le python site web
Vince,
J'étais également à la recherche de faire la même chose que ce post. Exécuter le Script Shell depuis python avec variable (variable je pense qu'avec l'argument de ligne de commande).
J'ai fait ce qui suit pour obtenir les résultats. Je partage au cas où d'autres personnes sont à la recherche pour la même réponse.
qui a très bien fonctionné pour moi.
J'ai aussi, après plus de la lecture il suggère qu'il serait préférable d'utiliser un processus secondaire.Popen, si vous voulez obtenir des résultats à des fins d'affichage. Je suis la journalisation de tout ce à un autre fichier dans le script bash, donc je n'ai pas vraiment besoin de sous-processus.
J'espère que cela aide.
Une solution simple à retenir:
Vous devez appeler le script shell dans le dessous de manière à partir de votre script python:
Reportez-vous ici pour la documentation de la sous-processus module. Dans le script ci-dessus, nous passer d'une liste à l'
call
méthode où le premier élément est le programme à exécuter et le reste des éléments dans la liste sont les arguments du programme.