我一直在研究这个问题一小时,这是令人愤怒的事情:
我有一个名为Manipula的.exe文件,它的源代码是.msu文件。我可以通过命令行成功运行我想要的东西,如:
"C:/Flow Check/Run Quick/Applications/Manipula.exe" "C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu"
但是,我无法在Python中模拟这种行为 - 无论我使用什么。我试过了
os.system
和subprocess.call
以及subprocess.Popen
如果我运行以下内容
p= subprocess.Popen("C:/Flow Check/Run Quick/Applications/Manipula.exe" "C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu", stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout.readlines():
print line,
retval = p.wait()
我收到错误:The System Cannot Find the File Specified.
我已经进行了三重检查,文件显然存在,因为它在我运行命令行时有效。
当我将shell=True
添加到subprocess.Popen时,出现一个新的错误,表明没有目录C:/Flow
,我认为因为shell很难处理空格...我只是没有'我知道发生了什么。
当我做os.system("C:/Flow Check/Run Quick/Applications/Manipula.exe" "C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu")
时没有任何事情发生。
有什么想法吗?
答案 0 :(得分:5)
将程序及其参数指定为list:
p = subprocess.Popen([
"C:/Flow Check/Run Quick/Applications/Manipula.exe",
"C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu"],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
写字符串文字串行合并字符串:
>>> "abc" "xyz"
'abcxyz'
答案 1 :(得分:4)
你没有传两个字符串;您正在传递一个字符串,其间没有空格。 Python会自动连接相邻的字符串,但两者之间只有空格:
>>> "C:/Flow Check/Run Quick/Applications/Manipula.exe" "C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu"
'C:/Flow Check/Run Quick/Applications/Manipula.exeC:/Flow Check/Data Processing/BLAISE TO BLAISE.msu'
请注意.exe
和C:/Flow
之间没有空格。
将两个字符串放在一个列表中:
p = subprocess.Popen(["C:/Flow Check/Run Quick/Applications/Manipula.exe", "C:/Flow Check/Data Processing/BLAISE TO BLAISE.msu"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
现在Popen()
将处理将正确引用的字符串作为一个命令传递给底层操作系统。