【发布时间】: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