2016-11-02 3 views
0

finden möchte ich den Befehl auszuführen:Python nicht einen Windows-Befehl auszuführen, mit

dir c: | find "File" 

für die Anzahl der Dateien in einem Ordner.

Neithor

subprocess.call(['dir c: | find "File"'], shell=True) 

oder

subprocess.call(['dir', 'c:', '| find "File"'], shell=True) 

funktioniert.

Python übersetzt den Befehl

'"dir c: | find \"file\""' 

den Fehler verursacht hat.

Gibt es eine Problemumgehung dafür?

In Verbindung stehende Anmerkung: http://www.cmi.ac.in/~madhavan/courses/prog2-2015/docs/python-3.4.2-docs-html/library/subprocess.html#notes

Dank

Antwort

2

Wenn Sie shell=True verwenden, sind Sie erwartet Befehl als Zeichenfolge übergeben, die von Shell interpretiert wird (z cmd auf Windows) während der Ausführung. Die Übergabe von Argumenten als Liste ist nur möglich, wenn shell=False.

einfach versuchen:

subprocess.call('dir c: | find "File"', shell=True) 
+0

Leider mit Schale = false, konnte es mit Fehlern: FileNotFoundError: [WinError 2] Das System der Datei – 69444091

+0

@ 69444091 angegeben nicht finden können, aber Łukasz erzählt Ihnen Verwenden Sie 'shell = True', außer mit einer Zeichenfolge anstelle einer Liste. 'subprocess.list2cmdline' weiß nicht, wie man eine Argumentliste in eine cmd-Shell-Befehlszeile konvertiert. Um 'FileNotFoundError' zu erhalten, ist' dir' ein eingebauter Befehl in der cmd-Shell. Verwenden Sie den Befehl 'wher.exe', um festzustellen, ob ein Befehl eine externe ausführbare Datei (z. B.' xcopy.exe') oder in die Shell integriert ist (z. B. 'copy'). – eryksun

0

1. alle, scheiterte ich aus den Fenstern 'dir' Befehl zu finden, so kann ich den Befehl nicht mit 'shell = False' auszuführen. Aber es funktioniert mit

os.chdir('C:') 
cdirszbuf = os.popen('dir | find "File"') 
cdirinfo = cdirszbuf.readlines() 

Dank

+0

In Python 3 ruft 'os.popen' einfach' subprocess.Popen' mit 'shell = True' auf und umschließt das Ergebnis in einer dateiähnlichen Klasse. Außerdem hat AFAIK niemandem gesagt, dass du 'shell = False' verwenden sollst, und ich habe bereits erklärt, dass' dir' ein eingebauter Shell-Befehl ist. Es gibt keine 'dir.exe' zum Ausführen. Dazu müssen Sie die Shell verwenden und die Befehlszeilensyntax wie "|" zum Erstellen einer Pipe zwischen zwei Befehlen unterstützen. – eryksun

Verwandte Themen