subprocess.call 路径问题,如何解决?

Posted

技术标签:

【中文标题】subprocess.call 路径问题,如何解决?【英文标题】:subprocess.call path problem , how to fix? 【发布时间】:2022-01-23 19:44:08 【问题描述】:

我的 subprocess.call 问题是我的快捷方式目标是带有额外的 INI 文件,即 LIV2.INI,我的 exe 文件应该运行它。我在快捷方式中的目标链接看起来像这样

"C:\Program Files (x86)\AMO\EXE\PROGRAM LIVE 2.exe" LIV2.INI

我试过了

subprocess.call('"C:\Users\admin\Desktop\PROGRAM LIVE 2.exe" LIV2.INI')

我试过了

subprocess.call('C:\Users\admin\Desktop\PROGRAM LIVE 2.exe LIV2.INI')

我仍然收到ini文件丢失的错误?我该如何解决这个问题:)

提前致谢

错误:INI 文件丢失或名称错误

【问题讨论】:

subprocess.call 需要一个列表作为参数,而不是字符串。先解决这个问题 查找“原始字符串”和“转义字符” 您遇到的具体错误是什么? 【参考方案1】:

还请编辑您的问题以实际包含错误,因为您将收到语法错误,而不是 ini 文件丢失的错误。

这里有两个问题,首先是语法错误,因为"\Us" 在 python 中不是有效的字符串。 \u 标记 Unicode 转义序列的开始,字符 S 不是有效的 Unicode 转义键。您可以通过使用双 \\ 转义 \ 字符并告诉 python 您希望您的字符串包含 \ 而不是将其用作转义序列的开头来解决此问题。

其次,subprocess.call 需要一个列表,而不是一个字符串(除非你设置了shell=True;但不要这样做,因为这意味着你必须手动转义你已经发现很难的东西)。列表的第一个元素 是要运行的可执行文件,其余的是命令行参数。例如,如果您想运行 pythone 并打印“hello world”,您可以输入:

subprocess.call(['python', '-c', 'print ("hello world")'])

注意到 python 字符串周围缺少引号了吗?您不需要这些,因为命令行参数是以原始形式传递的,如果您不包含引号,任何 shell 都不会尝试拆分它们。

把它们放在一起会产生这样的东西:

subprocess.call(['C:\\Users\\admin\\Desktop\\PROGRAM LIVE 2.exe', 'LIV2.INI'])

注意双反斜杠以及每个命令行参数如何成为其自己的列表元素。

【讨论】:

以上是关于subprocess.call 路径问题,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获 subprocess.call 的输出

如何使用 python 2.7.6 使 subprocess.call 超时?

如何在 python 中杀死使用 subprocess.call 调用的子进程? [复制]

subprocess.call() 如何与 shell=False 一起工作?

如何防止subprocess.call打印返回代码?

使用 os.system() 或 subprocess.call() 时如何隐藏控制台?