使用带有命令和参数的 python 子进程时出现“OSError: \[Errno 2\] No such file or directory”

新手上路,请多包涵

我正在尝试运行一个程序,使用 subprocess.call() 在 Python 代码中进行一些系统调用,这会引发以下错误:

 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)

我可以获得一些有关如何解决此问题的相关建议吗?

原文由 Sandeep Mederametla 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 631
2 个回答

使用 shell=True 如果您将字符串传递给 subprocess.call

来自 文档

如果传递单个字符串, shell 必须是 True 否则字符串必须简单地命名要执行的程序而不指定任何参数。

 subprocess.call(crop, shell=True)

要么:

 import shlex
subprocess.call(shlex.split(crop))

原文由 Ashwini Chaudhary 发布,翻译遵循 CC BY-SA 3.0 许可协议

No such file or directory 如果您尝试将文件参数添加到 Popen ,也可以使用双引号引发。

例如:

 call_args = ['mv', '"path/to/file with spaces.txt"', 'somewhere']

在这种情况下,您需要删除双引号。

 call_args = ['mv', 'path/to/file with spaces.txt', 'somewhere']

原文由 Daniil Mashkin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题