Da os.popen durch subprocess.popen ersetzt wird, habe ich mich gefragt, wie ich konvertieren soll
os.popen('swfdump /tmp/filename.swf/ -d')
zu subprocess.popen ()
Ich habe es versucht:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Aber ich denke, ich schreibe das nicht richtig auf. Jede Hilfe wäre dankbar. Vielen Dank
python
subprocess
popen
Stupid.Fat.Cat
quelle
quelle
Antworten:
subprocess.Popen
nimmt eine Liste von Argumenten:Es gibt sogar einen Abschnitt in der Dokumentation, der Benutzern bei der Migration von
os.popen
nach hilftsubprocess
.quelle
shell=True
wird nicht empfohlen.filename.swf; rm -rf /
des Wertes des Dateinamens. Dies ist jedoch nur dann ein Problem, wenn der Inhalt Ihres Arguments an Popen unsicher ist.shell=True
außer wenn nicht vertrauenswürdige Eingaben verwendet werden. Die bloße Angabe, dass diesshell=True
nicht empfohlen wird, ist irreführend.shell=True
, aber jeder zufällige Benutzer, der über diese Frage stolpert, ist dies möglicherweise nicht. Aus diesem Grund denke ich, dass es wichtig ist hervorzuheben, dass diesshell=True
tatsächlich nicht empfohlen wird, es sei denn, Sie wissen genau, was Sie tun.shutil.rmtree
zum Beispiel. Das hat aber nichts damit zu tun, ob sie in der stdlib enthalten sind oder nicht. Ich glaube, die UNIX-Philosophie von "Unix wurde nicht entwickelt, um seine Benutzer davon abzuhalten, dumme Dinge zu tun, da dies sie auch davon abhalten würde, kluge Dinge zu tun." gilt auch zu großen Teilen für Python.Verwenden Sie sh , es wird die Dinge viel einfacher machen:
quelle
Unterprozess auf einfachste Weise verwenden !!
quelle
shell=True
und übergeben Sie stattdessen eine Liste von Argumenten (z. B.subprocess.call(['pip', 'install', 'numpy'])
).shell=True
ist bei vom Benutzer bereitgestellten Eingaben unsicher (der Benutzer kann beliebige Befehle ausführen, wenn er ein Argument steuert) und aufgrund von Shell-Anführungsregeln schwieriger zu verwenden.