2017-02-09 65 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