2016-12-31 152 views
0

你好,我不能让我的脚本运行它是为了蒸发我的屏幕实时通过HTTP,但它出现了一个错误,我似乎无法修复。Python子进程错误没有这样的文件或目录

#!/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 
+1

那么,有什么错误? – 101

回答

2

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

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

注意,包含命令名称的第一个字符串应该包含任何空格!如果你使用“ffmpeg”(注意最后的空格)而不是“ffmpeg”,它会再次失败,出现“no such file or directory”错误,因为没有名称为“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)) 
+0

一个奇妙的答案,我是如此盲目。 –

+0

@Krazor我们都犯过这个错误。 :-) –

+0

是的。让我们把它归咎于一个错误的不直观的标准库。是啊。 +1 –

相关问题