Depuis que os.popen est remplacé par subprocess.popen, je me demandais comment convertirais-je
os.popen('swfdump /tmp/filename.swf/ -d')
à subprocess.popen ()
J'ai essayé:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Mais je suppose que je n'écris pas correctement cela. Toute aide serait appréciée. Merci
python
subprocess
popen
Stupide.Fat.Cat
la source
la source
Réponses:
subprocess.Popen
prend une liste d'arguments:Il existe même une section de la documentation consacrée à aider les utilisateurs à migrer de
os.popen
verssubprocess
.la source
shell=True
n'est pas recommandé.filename.swf; rm -rf /
la valeur du nom de fichier. Cependant, ce n'est un problème que lorsque le contenu de votre argument à Popen n'est pas sécurisé.shell=True
sauf lorsque vous utilisez une entrée non approuvée . Dire simplement que ceshell=True
n'est pas recommandé est trompeur.shell=True
, mais tout utilisateur aléatoire qui tombe sur cette question peut ne pas l'être. C'est pourquoi je pense qu'il est important de souligner qu'enshell=True
fait ce n'est pas recommandé, à moins que vous ne sachiez exactement ce que vous faites.shutil.rmtree
par exemple. Mais cela n'a rien à voir avec le fait qu'ils soient inclus dans la bibliothèque stdlib ou non. Je crois que la philosophie UNIX de «Unix n'a pas été conçue pour empêcher ses utilisateurs de faire des choses stupides, car cela les empêcherait également de faire des choses intelligentes». s'applique également en grande partie à Python.Utilisez sh , cela rendra les choses beaucoup plus faciles:
la source
Utiliser Subprocess de la manière la plus simple !!
la source