【问题标题】:Python Subprocess Error No Such File or Directory [duplicate]Python子进程错误没有这样的文件或目录[重复]
【发布时间】:2016-12-31 09:42:54
【问题描述】:

您好,我的脚本无法运行

#!/bin/python
import subprocess
import threading

try:
    subprocess.Popen("rm out.mpg")
except OSError:
    pass

subprocess.Popen("ffmpeg -f x11grab -framerate 60 -video_size 1366x768 -i :0.0 out.mpg")
subprocess.Popen("python -m SimpleHTTPServer 8000 out.mpg")

错误是

Traceback (most recent call last):
  File "Streaming.py", line 11, in <module>
    subprocess.Popen("ffmpeg -f x11grab -framerate 60 -video_size 1366x768 -i :0.0 out.mpg")
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1343, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

【问题讨论】:

  • 那么错误是什么?

标签: python subprocess


【解决方案1】:

Popen 的命令参数应该是一个字符串序列。 试试这个:

import subprocess
subprocess.Popen(["ffmpeg", "-f", "x11grab", 
                  "-framerate", "60", "-video_size",
                  "1366x768", "-i", ":0.0", "out.mpg"])

请注意,包含命令名称的第一个字符串不应包含任何空格!如果您使用“ffmpeg”(注意末尾的空格)而不是“ffmpeg”,它会再次失败并出现“没有这样的文件或目录”错误,因为没有名称为“ffmpeg”的命令!

你也可以使用shlex:

import subprocess
import shlex

cmd = "ffmpeg -f x11grab -framerate 60 -video_size 1366x768 -i :0.0 out.mpg"
subprocess.Popen(shlex.split(cmd))

【讨论】:

  • 一个绝妙的答案,我真是瞎了眼。
  • @Krazor 我们都犯了这个错误。 :-)
  • 是的。让我们把它归咎于一个有缺陷的不直观的标准库。是的。 +1
  • @Krazor 这并不是真正的错误。这正是类 UNIX 操作系统(Python 起源)的工作方式。
  • 我在开玩笑:)
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多