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

subprocess.call path problem , how to fix?

我的 subprocess.call 问题是我的快捷方式目标是额外的 INI 文件,它是 LIV2.INI 而我的 exe 文件应该 运行 。我的快捷方式目标 link 看起来像这样

"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 文件丢失或名称错误

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

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

其次,subprocess.call excpects 一个列表,而不是一个字符串(除非你设置 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'])

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