J'essaie d'exécuter un programme pour effectuer des appels système à l'intérieur du code Python à l'aide de subprocess.call()
ce qui génère l'erreur suivante:
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
Mon code Python actuel est le suivant:
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)
Puis-je obtenir des conseils pertinents sur la façon de résoudre ce problème?
python
django
subprocess
Sandeep Mederametla
la source
la source
Réponses:
À utiliser
shell=True
si vous passez une chaîne àsubprocess.call
.À partir de la documentation :
ou:
la source
shell=True
est fortement déconseillée dans les cas où la chaîne de commande est construite à partir d'une entrée externe», voir le lien dans la réponse.shell=True
n'est pas obligatoire. De plus, vous ne devriez pas l'utiliser sauf si c'est nécessaire (voir le commentaire de @ valid). Vous devez plutôt passer chaque argument de ligne de commande comme un élément de liste distinct, par exemple, utilisez à la['command', 'arg 1', 'arg 2']
place de"command 'arg 1' 'arg 2'"
.shell=True
. Les aspects de sécurité sortent du cadre de cette question.Je ne peux pas voter, alors je republierai le commentaire @jfs car je pense qu'il devrait être plus visible.
la source
No such file or directory
peut également être déclenché si vous essayez de placer un argument de fichierPopen
avec des guillemets.Par exemple:
Dans ce cas, vous devez supprimer les guillemets.
la source