2016-07-28 6 views
0

In meinem Programm nenne ich den Befehl:subprocess Fehlermeldung: [Errno 2] in _execute_child Erhöhung child_exception

command_two = 'sfit4Layer0.py -bv5 -fs' 
subprocess.call(command_two.split(), shell=False) 

ich PyCharm verwende und ich erhalte die Fehlermeldung:

Traceback (most recent call last): 
    File "part2test.py", line 5, in <module> 
    subprocess.call(command_two.split(), shell=False) #writes the summary file 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Beim Gehen durch mein Programm, es kommt nie zu dem Programm, ich will es sfit4Layer0.py, es ist im Subprozess stecken geblieben, aber ich bin mir nicht sicher warum. Das Ändern der Shell = True macht auch nichts hilfreich - ich bekomme diese Fehlermeldung nicht, aber sie führt meinen Code nicht korrekt aus. Irgendwelche Vorschläge wären hilfreich.

Mein bash Profil:

PATH="~/bin:/usr/bin:${PATH}" 

export PATH PYTHONPATH="/Users/nataliekille/Documents/sfit4/pbin/Layer0:/Users/nataliekille/Documents/sfit4/pbin/Layer1:/Users/nataliekille/Documents/sfit4/pbin/ModLib:/Users/nataliekille/Documents/sfit4/SpectralDB" 

export PYTHONPATH 

PATH=${PATH}:${PYTHONPATH} 

export PATH 
+0

Befindet sich das Skript in einem Verzeichnis, das sich in $ PATH befindet? – cdarke

+0

Über welches Skript sprichst du genau? Ich versuche jetzt, mein Bash-Profil zu bearbeiten und es wird finnicky. Wie würden Sie vorschlagen, ich schreibe das Verzeichnis in $ PATH? – alli

+0

Nehmen wir an, das Skript befindet sich in '/ home/user/Layer0', in Ihrem' .bash_profile' do: 'PATH =/home/user/Layer0: $ PATH' (es besteht keine Notwendigkeit für {}, obwohl sie es nicht tun tu keinen Schaden). Hinweis Ich habe den vollständigen hierarchischen Namen verwendet. Dann, in der Kommandozeile, "quelle" die Datei "'. ./. Bash_profile ", dann führe dein Python-Programm oder PyCharm aus. – cdarke

Antwort

0

Sie an important part of the subprocess documentation verpasst haben. "Wenn eine einzelne Zeichenfolge [bei dem Befehl statt einer Liste von Zeichenfolgen] übergeben wird, muss entweder die Shell True sein (siehe unten) oder die Zeichenfolge muss einfach das Programm benennen, das ohne Angabe von Argumenten ausgeführt werden soll."

Also der Kernel enthält, weil es keine ausführbare Datei mit dem Namen 'sfit4Layer0.py -bv5 -fs' gibt. Sollte funktionieren, wenn Sie die Zeichenfolge durch (zum Beispiel) 'sfit4Layer0.py -bv5 -fs'.split() oder ['sfit4Layer0.py', '-bv5', '-fs'] ersetzen.

+0

Ich benutze Split, wenn ich es anrufe, was es zu einer Liste machen sollte, oder? – alli

+0

Ja, sollte es - Entschuldigung, das habe ich verpasst (du hast nicht ed es ist die Frage, richtig?). Ja, das wird es zu einer Liste machen. Haben Sie überprüft, dass a) 'sfit4Layer0.py' auf Ihrem System' $ PATH' existiert? b) Ist das ausführbare Bit korrekt gesetzt? und c) Dass es eine "shebang" -Zeile wie '#!/usr/bin/env python 'hat, damit der Kernel weiß, mit welchem ​​Programm er es verarbeiten soll? – holdenweb

+0

Ich habe mein Bashprofil hinzugefügt. Das Programm befindet sich im Layer0-Verzeichnis. Soll das nicht ausreichen? – alli