Python的os.system(命令)和字符串内的破折号

时间:2018-01-17 08:26:45

标签: python string cmd

我想用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。

1 个答案:

答案 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"]

它将确保所有空格都正确转义,并使用相应的参数调用相应的程序。 (首先是程序,休息是参数)

相关问题