Ich habe ein Programm, das von einem anderen Programm, das auf dem neuen Windows-Subsystem für Linux ausgeführt wird, ausgegeben wird. Ich habe ein Python-Programm geschrieben, das vom Windows-System läuft, aber das Linux-Programm mit Python-Subprozess-Modul ausführen wird. Wenn das verwirrend ist, sehen Sie das Beispiel unten.python subprocess.call() kann Windows Bash.exe nicht finden
Allerdings, wenn ich das tue, finde ich, dass, wenn durch Python-Subprozess aufgerufen, können Windows Bash-Programm nicht finden.
Beispiel auf der Kommandozeile oder Powershell in Windows:
C:\>bash -c "echo hello world!"
hello world!
C:\>python
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess as s
>>> s.call('bash -c "echo hello world"'.split())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python27-32\lib\subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "c:\Python27-32\lib\subprocess.py", line 711, in __init__
errread, errwrite)
File "c:\Python27-32\lib\subprocess.py", line 948, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
>>> s.call('bash -c "echo hello world"'.split(),shell=True)
'bash' is not recognized as an internal or external command,
operable program or batch file.
1
Ich dachte, vielleicht war es nicht meinen Weg Einstellung Laden irgendwie so habe ich in der vollständigen Adresse des bash-Programms.
>>> s.call(b,shell=True)
'C:\Windows\System32\bash.exe' is not recognized as an internal or external command,
operable program or batch file.
1
EDIT: Ich weiß, mein Befehl könnte ein Problem, da o Uhr Splitting auf Räume werden zu geben und die „Echo Hallo Welt“ ist ein Argument, sondern versucht, die gleiche Sache mit bash -c ls
gibt auch den gleichen Fehler
@eryksun Danke, ich wusste, Bash war nur 64 Bit, aber dachte nicht, dass es zu dieser Art von Fehler führen würde, wenn es ein Kompatibilitätsproblem gab. Ich werde nur mein Programm mit der 64-Bit-Version von Python ausführen. Bitte setze das als Antwort, damit ich es annehmen kann! – jeffpkamp
Randbemerkung: 's.call ('bash -c" echo hallo world "'. Split())' ist _wrong_. Sie haben das Programm gerade so aufgerufen, als wären "echo", "hallo" und "world" als drei separate Argumente übergeben worden. Wenn Sie unbedingt ein einzelnes String-Literal teilen müssen, verwenden Sie eine Funktion wie 'shlex.split', die Regeln zum Zitieren versteht. – ShadowRanger