Nicht finden kann die angegebene Datei bei der Verwendung Teilprozess.call('dir', shell=True) in Python
In einer 64-bit-system mit 32-bit-python 2.7 installiert, ich versuche Folgendes zu tun:
import subprocess
p = subprocess.call('dir', shell=True)
print p
Aber das gibt mir:
Traceback (most recent call last):
File "test.py", line 2, in <module>
p = subprocess.call('dir', shell=True)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 709, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Wenn ich in das terminal zu tun...
dir
...es natürlich druckt die vorhanden Ordner-Inhalte.
Ich habe versucht, ändern Sie den shell-parameter die shell=False.
Edit: Eigentlich kann ich nicht nennen, jede ausführbare Datei auf dem Pfad mit subprocess.call()
. Die Aussage p = subprocess.call('dir', shell=True)
funktioniert einwandfrei auf einer anderen Maschine und ich denke, dass es verwandt ist.
Wenn ich
subprocess.call('PATH', shell=True)
dann bekomme ich
Traceback (most recent call last):
File "test.py", line 4, in <module>
subprocess.call('PATH', shell=True)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 709, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
Wenn ich das Tue:
import os
print os.curdir
dann bekomme ich
.
Alle der oben genannten ist ausgeführt im terminal gestartet im Administrator-Modus.
InformationsquelleAutor der Frage Andreas | 2013-12-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie haben ein problem mit Ihrem
COMSPEC
Umgebungsvariable:Entdeckte ich dieses potenzielle Problem durch das Graben in
subprocess.py
und suchen in der_execute_child
Funktion, wie bereits gesagt-durch den traceback. Dort finden Sie einen block, beginnend mitif shell:
wird suchen die Umgebung für die variable, und verwenden Sie es zum erstellen der Argumente, die verwendet werden, um den Vorgang zu starten.InformationsquelleAutor der Antwort zigg
Bevor downvote, beachten Sie, dass die Frage bearbeitet wurde, nachdem ich dies geschrieben, Antwort.
Ich denke
os.listdir
ist besser geeignet für die Ihren Fall:Wenn Sie möchten, laufen Sie in die Befehlszeile selbst, und nur das Gefühl, wie es zu nennen, können Sie
os.sytem
:Diesem ausgeführt wird, der Befehl, aber es gibt
0
und Sie können nicht speichern es.InformationsquelleAutor der Antwort aIKid
Falls jemand anderes neben mir nicht sehen, diese in der (3.4) docs sofort:
InformationsquelleAutor der Antwort Tom Grundy