2010-07-13 5 views

Répondre

11

sys.path est le chemin vers les bibliothèques Python, pas le chemin du système pour rechercher les binaires. Essayez plutôt de changer os.environ['PATH'].

>>> sys.path.append("/opt/local/bin") 
>>> os.system("wget") 
sh: wget: command not found 
32512 
>>> os.environ['PATH'] += os.pathsep + '/opt/local/bin' 
>>> os.system("wget") 
wget: missing URL 
+1

C'est tout. Hot-dog. –

3

Vous voulez utiliser le pour quelque chose de sérieux module de subprocess au lieu de os.system,. Pour os.system, faites ceci:

os.system('/home/myname/mydir/foo ') 

Pour subprocess:

p = subprocess.Popen(['/home/myname/mydir/foo']) 
p.communicate('') 
if p.returncode != 0: 
    raise Exception('foo failed') 

Si vous vous souciez de argv de foo [0] étant 'foo' et non '/ home/myname/mydir/foo', faire ceci:

p = subprocess.Popen(['foo'], executable='/home/myname/mydir/foo') 

la raison subprocess est tellement mieux que os.system est qu'il offre un meilleur contrôle sur la liste des arguments: il ne nécessite pas la ligne de commande t o être analysé par le shell, et cela évite toute une série de problèmes de sécurité potentiels, en particulier avec les noms de fichiers fournis par l'utilisateur et autres. L'autre raison est que subprocess permet une meilleure gestion des erreurs et une meilleure redirection de stdin, stdout et stderr. (Non montré dans l'exemple ci-dessus.)

+0

Merci. Je vais regarder dans cela aussi. –

Questions connexes