【问题标题】:Python - os.system - entering command line with multiple file paths (alternatives to r"C:\etc")Python - os.system - 输入带有多个文件路径的命令行(替代 r"C:\etc")
【发布时间】:2020-02-11 21:15:21
【问题描述】:

从 Python 3 将以下内容输入 Windows 命令行的最佳方法是什么?命令中有三个文件路径必须在一行中输入(我相信)。

"C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2" -B -F "E:\MEngA\Ansys\IFD_PartA_Rev3.wbpj" -R "E:\MEngA\Results\sn07\script_partA.wbjn"

它需要引号。目前正在尝试:

os.system('"C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2" -B -F "E:\MEngA\Ansys\IFD_PartA_Rev3.wbpj" -R "E:\MEngA\Results\sn07\script_partA.wbjn"')

但空格会导致问题:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

在尝试文件路径之前使用 r: os.system(r'"C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2")

但不适用于完整的字符串。任何想法如何解决这个问题?

【问题讨论】:

  • 如果你不使用原始字符串,也不通过将它们加倍来逃避你的反斜杠,那么 Python 不知道你的反斜杠应该被传递给子进程,而不是解释为引用特殊字符。为了给你举例说明我的意思,请记住 \t 不是反斜杠-然后-a-t 而是单个制表符,\n 不是反斜线-然后-a-@987654328 @ 但只有一个换行符。因此,当您想告诉 Python 反斜杠“只是一个反斜杠”时,您要么需要将其加倍,要么将其放入“原始”字符串中。
  • 无论如何,首先使用os.system() 被认为是不好的做法。 subprocess.run()Popen() 系列中的其他调用应该在新代码中使用——传递一个列表而不是字符串,然后 Python 解释器而不是你正在编写的代码负责知道如何以正确解释的方式将数据传递给操作系统(或者,对于 Windows,标准 C 库在被调用程序的内存空间中的命令行解析器)。
  • @CharlesDuffy 您能否发布一个示例,说明如何使用 sub.process.run() 或 Popen() 中的合适函数来构造它?

标签: python python-3.x os.system


【解决方案1】:

您可以使用subprocess.run,它接受一起构成完整命令的字符串列表。由于您的路径包含反斜杠,您可以使用 r'' 来获取原始字符串。第一个路径也包含空格,因此需要用额外的引号括起来 ""

import subprocess

subprocess.run([
    r'"C:\Program Files\ANSYS Inc\ANSYS Student\v194\Framework\bin\Win64\runwb2"',
     '-B',
     '-F',
    r'E:\MEngA\Ansys\IFD_PartA_Rev3.wbpj',
     '-R',
    r'E:\MEngA\Results\sn07\script_partA.wbjn',
])

【讨论】:

  • 谢谢,结构的例子非常感谢。我现在有“[WinError 5] Access is denied”,但我会自己尝试解决这个问题..
  • @JosephLangley 这听起来确实是一个不同的问题。
  • 这可能是管理员权限的事情。关于如何以管理员身份运行上述内容的任何想法? @a_guest
  • @JosephLangley 我想这本身就是一个问题(也许之前已经有人问过了)。
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 2012-10-12
  • 2016-01-17
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多