Estoy tratando de ejecutar un programa para hacer algunas llamadas al sistema dentro del código de Python subprocess.call()
que arroja el siguiente error:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.7/subprocess.py", line 493, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Mi código actual de Python es el siguiente:
url = "/media/videos/3cf02324-43e5-4996-bbdf-6377df448ae4.mp4"
real_path = "/home/chanceapp/webapps/chanceapp/chanceapp"+url
fake_crop_path = "/home/chanceapp/webapps/chanceapp/chanceapp/fake1"+url
fake_rotate_path = "/home/chanceapp/webapps/chanceapp.chanceapp/fake2"+url
crop = "ffmpeg -i %s -vf "%(real_path)+"crop=400:400:0:0 "+ "-strict -2 %s"%(fake_crop_path)
rotate = "ffmpeg -i %s -vf "%(fake_crop_path)+"transpose=1 "+"%s"%(fake_rotate_path)
move_rotated = "mv"+" %s"%(fake_rotate_path)+" %s"%(real_path)
delete_cropped = "rm "+"%s"%(fake_crop_path)
#system calls:
subprocess.call(crop)
¿Puedo obtener algunos consejos relevantes sobre cómo resolver esto?
python
django
subprocess
Sandeep Mederametla
fuente
fuente
Respuestas:
Úselo
shell=True
si está pasando una cadena asubprocess.call
.De documentos :
o:
fuente
shell=True
se desaconseja encarecidamente el uso en los casos en que la cadena de comandos se construya a partir de una entrada externa", consulte el enlace en la respuesta.shell=True
no es obligatorio. Además, no debe usarlo a menos que sea necesario (vea el comentario de @ valid). En su lugar, debe pasar cada argumento de la línea de comandos como un elemento de lista separado, por ejemplo, use en['command', 'arg 1', 'arg 2']
lugar de"command 'arg 1' 'arg 2'"
.shell=True
. Los aspectos de seguridad están más allá del alcance de esta pregunta.No puedo votar, así que volveré a publicar el comentario de @jfs porque creo que debería ser más visible.
fuente
No such file or directory
también puede aparecer si está tratando de poner un argumento de archivoPopen
con comillas dobles.Por ejemplo:
En este caso, debe eliminar las comillas dobles.
fuente