2013-03-27 28 views
-2

J'écris un programme python sous linux.Exécuter une commande linux dans un programme python

Dans mon programme python, j'ai besoin d'exécuter une commande linux dans un autre répertoire de travail, depuis le programme python lui-même.

Exemple: Mon programme test.py se trouve dans le répertoire dir1/dir2.

./wlst.sh est un programme dans dir1/dir2/dir3/dir4.

J'ai donc besoin d'exécuter .wlst.sh dans dir4 à partir du programme python situé dans dir2.

Comment cela peut-il être fait?

+0

Je suppose que vous avez googlé et trouvé le ([ 'subprocess'] http://docs.python.org/2/library/subprocess.html # module-sous-processus). Quels problèmes avez-vous avec cela? –

Répondre

0
import subprocess 
subprocess.call(['./wlst.sh'], cwd='dir1/dir2/dir3/dir4') 
+0

L'utilisation de 'chdir' aura l'effet secondaire évident; mieux utiliser le paramètre optionnel 'cwd =' pour 'call()'. – Alfe

3
import subprocess 
try: 
    output = subprocess.check_output(
    [ './wlst.sh' ], 
    cwd='dir1/dir2/dir3/dir4', 
    stderr=subprocess.STDOUT) 
except subprocess.CalledProcessError as problem: 
    print "Error", problem.returncode 
    print " while calling subprocess, output was:", problem.output 
else: 
    print "No error while calling subprocess, output was:", output 

Je dois mentionner que cette capture toute la sortie du sous-processus, donc si ce sous fait beaucoup, beaucoup (et peut-être ne sera jamais fin), cela remplira votre RAM. Envisagez d'utiliser check_call() au lieu de check_output() dans ce cas, peut-être avec la redirection de la sortie vers /dev/null.

-2
import os ,subprocess 
    os.chdir("dir3/dir4") 
    os.system("./wlst.sh") 

ou bien u peut utiliser subprocess

os.chdir("dir3/dir4") 
    subprocess.call("./wlst.sh") 
+0

L'utilisation de 'chdir' aura l'effet secondaire évident. – Alfe

Questions connexes