Я пытаюсь запустить программу, чтобы сделать некоторые системные вызовы внутри кода Python, используя subprocess.call()
который выдает следующую ошибку:
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
Мой настоящий код Python выглядит следующим образом:
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)
Могу ли я получить несколько важных советов о том, как решить эту проблему?
python
django
subprocess
Сандип Медераметла
источник
источник
Ответы:
Используйте,
shell=True
если вы передаете строкуsubprocess.call
.Из документов :
или:
источник
shell=True
не рекомендуется в тех случаях, когда командная строка создается из внешнего ввода", см. Ссылку в ответе.shell=True
не требуется. Кроме того, вы не должны использовать его, если это необходимо (см. Комментарий @ valid). Вы должны передавать каждый аргумент командной строки как отдельный элемент списка, например, использовать['command', 'arg 1', 'arg 2']
вместо"command 'arg 1' 'arg 2'"
.shell=True
. Аспекты безопасности выходят за рамки этого вопроса.Невозможно поднять голос, поэтому я отправлю комментарий @jfs, потому что думаю, что он должен быть более заметным.
источник
No such file or directory
также может быть вызвано, если вы пытаетесь указатьPopen
с двойными кавычками.Например:
В этом случае вам необходимо удалить двойные кавычки.
источник