2016-06-28 18 views
2

Ich versuche, einen Befehl auszuführen, wie unten mit Python in Windows und läuft in WindowsError: [Error 2] The system cannot find the file specified Fehler, derzeit habe ich nicht script.exe auf meinem PC, manuell ausgeführt es wirft den Fehler 'script.exe' is not recognized as an internal or external command,operable program or batch file., würde ich erwarten, dass der gleiche Fehler ausgelöst wird ? durch python läuft, wie man diesen Fehler beheben schätzen wirklich jede Eingängegibt es eine Möglichkeit, Befehle in Python auf Windows auszuführen?

Code: -

cmd = "script.exe" 
print "Executing " + cmd 
fetchPipe = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
(output, error) = fetchPipe.communicate() 
+0

Sie müssen den vollständigen Pfad zu 'script.exe' verwenden ist die einfachste Antwort ... oder übergeben Sie die Umgebungs-PATH-Variable ... oder übergeben 'shell = True', aber es gibt einige Auswirkungen auf die Sicherheit mit dieser –

+0

Wenn die Datei nicht existiert, können Sie versuchen, so hart wie Sie können, wird es nicht starten. Das ist die Basis eines nicht existierenden Elements. Sie müssen einen vollständigen Pfad zu Ihrer Software/Ihrem Skript angeben, die innerhalb der cmd-Variablen ausgeführt werden soll. (Beachten Sie, dass relative Pfade auch funktionieren, aber viel schwieriger zu verwenden sind, da Sie wissen müssen, wo sich die Datei befindet. – Artemis

+0

@JoranBeasley und Artemis - Ich kann den absoluten Pfad nicht angeben, da 'script.exe' nicht in einem ist bestimmter Ort, kann es irgendwo in der PATH-Variable sein, so Übergabe in der Umgebung PATH-Variable sieht aus wie der Weg, wie übergebe ich in der Umgebung PATH-Variable? –

Antwort

1
def find_abs_path(executable_fname): 
    if os.path.exists(executable_fname): # in case it is in our cwd 
     return os.path.abspath(os.path.join(".",executable_fname)) 
    for dirname in os.environ["PATH"].split(";"): # split dependant on your os 
     if executable_fname in os.listdir(dirname): 
      return os.path.join(dirname,executable_fname) 

sollte Ihr Weg suchen und den absoluten Pfad

diese an die ausführbare Datei finden, ist der empfohlene Weg, es zu tun ...

... jedoch Sie passieren kann ein env

subprocess.Popen(cmd_args,env=os.environ,...) 

Dies sollte die gleiche PATH-Variable an die Subshell, dass ru liefern ns ... als solche kann es wahrscheinlich die ausführbare Datei finden ...

+0

zu übergeben Wenn die ausführbare Datei an mehreren Stellen in der Umgebungsvariable vorhanden ist, welcher Ort würde sie zurückgeben? –

+0

das gleiche würde Ihre Shell finden, wenn Sie nur die ausführbare Datei eintippten ich in der Schale direkt ... (der erste auf dem Weg ...) –

2

Sie haben zwischen einer dieser Lösungen wählen:

  1. passieren die relative path und das aktuelle Arbeitsverzeichnis in den gleichen Ordner festlegen, die script.exe enthält von os.chdir('folderPath') verwenden, bevor Sie die Datei

OR

  1. die zu öffnen versucht, passieren absolute path zum script.exe Datei von cmd = os.getcwd() + "\\script.exe"

durch die Verwendung des zweiten Ansatz, müssen Sie:

cmd = os.getcwd() + "\\script.exe" 
print "Executing " + cmd 
fetchPipe = subprocess.Popen(cmd.split(' '), stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
(output, error) = fetchPipe.communicate() 
+0

Ich kann den absoluten Pfad nicht geben, da script.exe nicht in einer bestimmten ist Ort, kann es überall in der PATH-Variable sein, so dass die Übergabe der Umgebungs-PATH-Variable wie der Weg aussieht, schlagen Sie anders vor? –

+0

tatsächlich gibt es die Möglichkeit, das (schlecht dokumentierte) 'env'-Argument –

Verwandte Themen