OSError: [Errno 2] 在 Django 中使用 python 子进程时没有这样的文件或目录
问题描述:
我正在尝试运行一个程序以使用 subprocess.call()
在 Python 代码中进行一些系统调用,这会引发以下错误:
I am trying to run a program to make some system calls inside Python code using subprocess.call()
which throws the following 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
我的实际Python代码如下:
My actual Python code is as follows:
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)
我能得到一些有关如何解决这个问题的相关建议吗?
Can I get some relevant advice on how to solve this?
答
如果您要将字符串传递给 subprocess.call
,请使用 shell=True
.
Use shell=True
if you're passing a string to subprocess.call
.
来自文档:
如果传递单个字符串,shell
必须为 True
或否则字符串必须简单地命名要执行的程序,而不是指定任何参数.
If passing a single string, either
shell
must beTrue
or else the string must simply name the program to be executed without specifying any arguments.
subprocess.call(crop, shell=True)
或:
import shlex
subprocess.call(shlex.split(crop))