繁体   English   中英

Python的os.system(command)和字符串中的破折号

[英]Python's os.system(command) and dashes inside a string

我想用os.system()运行一些命令。 我准备了字符串“ command”(包括一些破折号,斜杠)并尝试执行以下操作:

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”不是内部或外部命令,可执行程序或程序包文件。)

如果我在命令行中复制+粘贴,则此(打印(命令)的输出):

"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并使用''.join(argfile)将其放在一个字符串中。此后,我将flepath和文件名分开(如果文件名已满-带有绝对路径)。 最后,我以程序路径,破折号,文件全名,选项\\ saveas构成命令,再次以全名加上路径,但带有其他文件扩展名,破折号和选项\\ exit。

您不应使用os.system,而应使用subprocess.call:

import subprocess
subprocess.call(["C:\Program Files (x86)\SimInTech\bin\mmain.exe", "Aux Systems.prt", "/saveas", "Aux Systems.xprt", "/exit"]

这将确保所有空格均正确转义,并使用相应的参数调用相应的程序。 (列表的第一个是程序,其余的是参数)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM