我想用os.system()运行一些命令。 我准备了字符串"命令" (包括一些破折号,斜线)并尝试:
print(command)
os.system(command)
我的输出:
"C:\Program Files (x86)\SimInTech\bin\mmain.exe" "Aux Systems.prt" /saveas "Aux Systems.xprt" /exit
"C:\Program" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
(" C:\ Program"不是内部或外部命令,可执行程序或包文件。)
如果我在命令行中复制+粘贴(print(命令)的输出):
"C:\Program Files (x86)\SimInTech\bin\mmain.exe" "Aux Systems.prt" /saveas "Aux Systems.xprt" /exit
工作正常。 那么,问题是什么以及如何避免它?
我如何准备我的"命令的一些细节"字符串:
import sys
import os
import codecs
simintech = '"C:\\Program Files (x86)\\SimInTech\\bin\\mmain.exe"'
argfile = sys.argv[1:len(sys.argv)]
file = ' '.join(argfile)
file = file.strip()
filepath, filename = os.path.split(file)
if filepath !='':
filepath = filepath+"\\"
oldname = filename
newname = filename.replace('.prt','.xprt')
command = simintech + ' "' + filepath +oldname+'" /saveas "'+filepath+newname+'" /exit'
说明: 我用文件名作为参数运行我的脚本。 文件名可以包含空格,所以我收集所有的args并使用'将它放在一个字符串中。 '。加入(argfile) 之后我将flepath和filename分开(如果文件名已满 - 使用绝对路径)。 最后我用我的程序的路径,破折号,文件的全名,选项\ saveas,再次使用路径的全名来形成我的命令,但是带有其他文件扩展名,破折号和选项\ exit。
答案 0 :(得分:1)
你不应该使用os.system,而是使用subprocess.call:
import subprocess
subprocess.call(["C:\Program Files (x86)\SimInTech\bin\mmain.exe", "Aux Systems.prt", "/saveas", "Aux Systems.xprt", "/exit"]
它将确保所有空格都正确转义,并使用相应的参数调用相应的程序。 (首先是程序,休息是参数)