从python执行子过程

| 我认为当我尝试从python脚本执行子过程时,某些事情正在被巧妙地处理。 我尝试使用一些(很多)参数执行vlc。 出现的vlc实例抱怨:   您的输入无法打开:   VLC无法打开MRL \'-vvv rtsp://192.168.1.201:554 / ch0_multicast_one --sout =#transcode {acodec = none}:duplicate {dst = rtp {sdp = rtsp://:5544 / user_hash .sdp},dst = display}:no-sout-rtp-sap:no-sout-standard-sap:ttl = 1:sout-keep \'。检查日志以获取详细信息。 这是python代码
pid = subprocess.Popen([\"vlc \",\" -vvv rtsp://%s\" % target_nvc.ip_address + \":554/ch0_multicast_one --sout=#transcode{acodec=none}:duplicate{dst=rtp{sdp=rtsp://:5544/user_hash.sdp},dst=display} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep\" ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
我已经检查了子进程功能的输出(使用外壳程序),并且如果我将该字符串复制粘贴到我的cmd窗口中,则vlc实例可以正常工作...这是特权吗?     
已邀请:
        你应该用这个...
pid = subprocess.Popen([\"vlc\", \"-vvv\", 
    \"rtsp://%s\" % target_nvc.ip_address + \":554/ch0_multicast_one\", 
    \"--sout=#transcode{acodec=none}:duplicate{dst=rtp{sdp=rtsp://:5544/user_hash.sdp},dst=display}\", 
    \":no-sout-rtp-sap\", \":no-sout-standard-sap\", 
    \":ttl=1\", \":sout-keep\" ], stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    
        由于您要将列表传递给
subprocess.Popen
,因此每个参数都必须位于其自己的元素中。因此,您需要以下内容:
pid = subprocess.Popen([
    \"vlc\",
    \"-vvv\",
    \"rtsp://%s:554/ch0_multicast_one\" % target_nvc.ip_address,
    # etc
], ...)
每个参数(shell通常会为您解析的参数)必须位于单独的list元素中。 您还可以传递单个命令行字符串,并使外壳将其拉开:
pid = subprocess.Popen(\"vlc -vvv rtsp://...\", shell=True, ...)
对于具有大量参数的命令,使用第一种形式更好。     

要回复问题请先登录注册