Probleme beim Hinzufügen von Pfad und Aufruf von externem Programm von Python

Ich habe eine ausführbare Datei namens "foo" in "/ home / myname / mydir /" und versuche es von Python zu nennen, aber ich mache etwas Grundsätzliches und Unrecht hier. Kannst du mir helfen?

import os, sys sys.path.append("/home/myname/mydir/") os.system("foo") # os.system("./foo") doesn't work either 

Vielen Dank

2 Solutions collect form web for “Probleme beim Hinzufügen von Pfad und Aufruf von externem Programm von Python”

sys.path ist der Pfad zu Python-Bibliotheken, nicht das System PATH, um nach Binärdateien zu suchen. Versuchen Sie, os.environ['PATH'] ändern.

 >>> 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 

Du wirst das os.system Modul anstelle von os.system , für irgendetwas Ernstes. Für os.system , dies tun:

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

Für subprocess :

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

Wenn Sie sich um foo's argv [0] 'foo' und nicht '/ home / myname / mydir / foo' kümmern, machen Sie dies:

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

Der os.system ist so viel besser als os.system ist, dass es eine bessere Kontrolle über die Argumentliste bietet: Es erfordert nicht die Befehlszeile, die von der Shell geparst werden soll, und das vermeidet eine ganze Reihe von potenziellen Sicherheitsproblemen, insbesondere mit dem Benutzer -die Dateinamen und solche. Der andere Grund ist, dass subprocess eine bessere Behandlung von Fehlern und eine bessere Umleitung von Stdin, Stdout und Stderr bietet. (Im obigen Beispiel nicht gezeigt).

  • Mehrere Threads lesen aus einem Ordner unter Linux
  • Cross-Plattform-Unterprozess mit verstecktem Fenster
  • Python portable, linux & windows
  • Wie kann man X11-Fenster verschieben oder verkleinern (auch wenn sie maximiert sind)?
  • Tornado Python als Dämon
  • Empfangen von Multicast-UDP-Datagrammen mit Python auf Linux
  • Führen Sie ein Python-Skript im Terminal ohne den Python-Befehl
  • Bindende Rückrufe zur Minimierung und Maximierung von Ereignissen in Toplevel-Fenstern
  • Echtzeit-Sound-Synthesizer aus einer unterschiedlichen Eingabe in Python
  • Wie kann ich das "Backend" in Matplotlib in Python setzen?
  • Modifikation von Python-Daemon-Skript, Stop nicht wieder OK (aber tötet den Prozess)
  • Python ist die beste Programmiersprache der Welt.