![](/img/trans.png)
[英]Python - Popen(shlex.split(command), shell=False) - not working with ffmpeg
[英]Popen(shlex.split(command), shell=False, stdin=PIPE) error WindowsError: [Error 2] The system cannot find the file specified
我正在尝试让Windows上运行的shell = False的Popen命令运行,而对我而言,我无法使其正常运行。 iTMSTransporter是一个命令行应用程序。 这是我当前的代码:
import os
import shlex
import subprocess
from subprocess import Popen, PIPE, STDOUT
link = "C:/progra~1/itms/iTMSTransporter"
link1 = os.path.normpath(link)
link2 = "C:/Temp/test1.itmsp"
link3 = os.path.normpath(link2)
link4 = os.path.join(link3, "LogFile.txt")
command = link1 + " -m verify -f " + link3 +" -u username -p password -o " + link4 + " -s provider -v eXtreme"
process = Popen(shlex.split(command), shell=False, stdin=PIPE)
这给了我错误:
Traceback (most recent call last):
File "C:\Temp\temp.py", line 13, in <module>
process = Popen(shlex.split(command), shell=False, stdin=PIPE)
File "C:\Python27\lib\subprocess.py", line 709, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
我敢肯定progra〜1不是问题,因为它可用于shell = True,并且也尝试过Program Files,结果相同。 有什么想法可以在Windows平台Python 2.7上运行吗?
经过大量研究,我发现了如何做到这一点,以供参考,这就是我的做法:
import os
import subprocess
from subprocess import Popen, PIPE, STDOUT
link = "C:/progra~1/itms/iTMSTransporter.cmd"
link1 = os.path.normpath(link)
link2 = "C:/Temp/test1.itmsp"
link3 = os.path.normpath(link2)
link4 = os.path.join(link3, "LogFile.txt")
command = link1 + " -m verify -f " + link3 +" -u username -p password -o " + link4 + " -s provider -v eXtreme"
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
process = Popen(command, startupinfo=startupinfo, shell=False)
在输入文件中添加.cmd并删除shlex模块可以解决问题,并添加代码以停止打开命令窗口。
shlex.split
到目前为止(即使posix=0
)也不适合Windows命令行,也没有必要。 有关更多详细信息,请参见python,windows:使用shlex解析命令行 。
shlex类使您可以轻松地为类似于Unix shell的简单语法编写词法分析器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.