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
;但不要这样做,因为这意味着你必须手动转义你已经发现很难的东西)。列表的第一个元素
是要运行的可执行文件,其余的是命令行参数。例如,如果您想运行 python
e 并打印“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 路径问题,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 python 2.7.6 使 subprocess.call 超时?
如何在 python 中杀死使用 subprocess.call 调用的子进程? [复制]