【问题标题】:Python's os.system(command) and dashes inside a stringPython os.system(command) 和字符串中的破折号
【发布时间】:2018-01-17 08:26:44
【问题描述】:

我想用 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" 不是内部或外部命令、可执行程序或包文件。)

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

"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'

说明: 我以文件名作为参数运行我的脚本。 文件名可以包含空格,所以我收集所有参数并使用 ' '.join(argfile) 将其放入一个字符串中 之后,我将文件路径和文件名分开(如果文件名已满 - 使用绝对路径)。 最后,我用程序的路径、破折号、文件的全名、选项 \saveas、再次带有路径但带有其他文件扩展名的全名、破折号和选项 \exit 来形成我的命令。

【问题讨论】:

  • 请提出一个正确的问题。指定您的问题以及除结果之外的问题。
  • 顺便说一句os.system老了,不应该用,搜索Popen

标签: python string cmd


【解决方案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"]

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

【讨论】:

  • 看起来不错。但还有一个问题。我得到一个 PermissionError... 我必须使用一些选项吗?
  • @TimofeyKargin 通常不会。您可以尝试以管理员身份执行程序或查找您没有权限的文件夹/文件并更改权限。
  • 是的,谢谢。看起来这是一个普遍的问题。当前工作目录的东西(也许)。所以,我正在寻找新问题的解决方案。不过,你的建议还是很有用的。
猜你喜欢
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多