Dado que os.popen está siendo reemplazado por subprocess.popen, me preguntaba cómo convertiría
os.popen('swfdump /tmp/filename.swf/ -d')
a subprocess.popen ()
Lo intenté:
subprocess.Popen("swfdump /tmp/filename.swf -d")
subprocess.Popen("swfdump %s -d" % (filename)) # NOTE: filename is a variable
# containing /tmp/filename.swf
Pero supongo que no estoy escribiendo esto correctamente. Cualquier ayuda sería apreciada. Gracias
python
subprocess
popen
Estúpido gato gordo
fuente
fuente
Respuestas:
subprocess.Popen
toma una lista de argumentos:Incluso hay una sección de la documentación dedicada a ayudar a los usuarios a migrar de
os.popen
asubprocess
.fuente
shell=True
es no recomendable.filename.swf; rm -rf /
el valor del nombre de archivo. Sin embargo, esto es solo un problema cuando el contenido de su argumento para Popen es inseguro.shell=True
excepto cuando se usa una entrada que no es de confianza . Simplemente decir queshell=True
no se recomienda es engañoso.shell=True
, pero cualquier usuario aleatorio que se encuentre con esta pregunta podría no serlo. Por eso creo que es importante destacar queshell=True
de hecho no se recomienda, a menos que sepas exactamente lo que estás haciendo.shutil.rmtree
por ejemplo. Pero eso no tiene nada que ver con si están incluidos en stdlib o no. Creo que la filosofía de UNIX de "Unix no fue diseñada para evitar que sus usuarios hagan cosas estúpidas, ya que eso también les impediría hacer cosas inteligentes". también se aplica en gran parte a Python.Usa sh , te facilitará mucho las cosas:
fuente
¡Usando Subprocess de la manera más fácil!
fuente