在python中使用引号运行bash命令

时间:2017-02-09 02:18:45

标签: python bash

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

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)

另外请注意,有没有更好的方法来格式化这个混乱?

1 个答案:

答案 0 :(得分:0)

python文档说:

  

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之后看到双引号。那些双引号会使args不准确。