Python-subprocess wildcard benutzen
import os
import subprocess
proc = subprocess.Popen(['ls','*.bc'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = proc.communicate()
print out
Dieses Skript ausdrucken sollten alle Dateien, die mit .bc suffix aber es gibt eine leere Liste zurück. Wenn ich ls *.bc manuell in der Kommandozeile funktioniert es. Tun ['ls','test.bc'] im script so gut funktioniert, aber für einige Grund das Stern-symbol funktioniert nicht.. Irgendwelche Ideen ?
InformationsquelleAutor der Frage Cemre | 2012-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie liefern
shell=True
ausführen den Befehl über einen shell interpreter.Wenn Sie das tun, können Sie jedoch nicht mehr die Versorgung einer Liste als erstes argument, denn die Argumente werden zitiert dann. Geben Sie stattdessen den raw-commandline, wie Sie wollen, es zu übergeben, um die shell:
InformationsquelleAutor der Antwort Niklas B.
Ausbau der
*
Golf ist der Teil der shell, aber standardmäßigsubprocess
hat nicht senden Ihre Befehle über eine shell, damit der Befehl (das erste argument,ls
) ausgeführt wird, dann wird ein literal*
dient als argument.Dies ist eine gute Sache, siehe die Warnung blockieren Sie in den "Häufig Verwendete Argumente" Abschnittder Teilprozess docs. Es hauptsächlich diskutiert Sicherheits-Implikationen, aber auch hilft zu vermeiden, dumme Fehler in der Programmierung (da gibt es keine Magische shell-Zeichen zu kümmern)
Mein Haupt-Beschwerde mit
shell=True
ist es in der Regel impliziert, dass es einen besseren Weg zu gehen über das problem mit deinem Beispiel, sollten Sie Verwendung dieglob
- Modul:Dieser wird schneller (kein Prozess startup-overhead), zuverlässiger und cross-Plattform (nicht abhängig von der Plattform mit einem
ls
Befehl)InformationsquelleAutor der Antwort dbr