2017-02-09 37 views
0

我想运行一个bash命令来启动一个在python中使用MJPG流的流。虽然我知道一般过程是将命令放入一个字符串中,然后拆分字符串,然后将拆分字符串放入Popen中,但我遇到的问题是该命令需要双引号,而.split()会删除这些字符,因此我我收到错误,指出-d标志是一个无法识别的选项。该命令运行良好,如果我直接运行它,但我似乎无法让它从Python(Python 2.7)运行。在python中用引号运行bash命令

from subprocess import Popen 

def start_stream(device): 
    stream_start_cmd = """ 
         sudo /usr/local/bin/mjpg_streamer -i 
         "/usr/local/lib/input_uvc.so -d /dev/video{0} -y" 
         -o "/usr/local/lib/output_http.so -w 
         /usr/local/www -p {1}" 
         """.format(device, 
            '80' if device == 0 else '443 &') 
    Popen(stream_start_cmd.split()) 


if __name__ == '__main__': 
    start_stream(0) 

也侧面说明,有没有更好的方式来格式化这个烂摊子?

+0

我认为这是一个单一的命令 – hjpotter92

+0

我不认为你需要'/usr/local/lib/input_uvc.so -d/dev/video {0} -y'和'/ usr/local/lib /output_http.so -w /usr/local/www -p {1}' – haifzhan

回答

0

蟒蛇文件说:

ARGS应的程序参数的序列或者一个字符串。

根据您提供的命令,一旦分裂,我们有

['sudo', '/usr/local/bin/mjpg_streamer', '-i', '"/usr/local/lib/input_uvc.so', '-d', '/dev/video{0}', '-y"', '-o', '"/usr/local/lib/output_http.so', '-w', '/usr/local/www', '-p', '{1}"'] 

你可以看到有在/usr/local/lib/input_uvc.so前,-y后双引号。这些双引号会使参数不准确。

+0

删除双引号仍然会产生相同的错误。 – sToxic5