【发布时间】:2021-01-06 16:38:53
【问题描述】:
几天前,我的程序中有os.system(r"C:\Users\red\Desktop\Test UI") 这一行。我对其进行了测试,它运行良好,它按照我想要的方式打开了应用程序。
现在,大约五天后我又回来了,突然间它不能正常工作了。我检查了流程,上面写着'C:\Users\red\Desktop\Test' is not recognized as an internal or external command, operable program, or batch file.
我已经查看了有关 os.system 的其他问题,例如 How do I execute a program from Python? os.system fails due to spaces in path,但我已经在使用原始字符串,例如建议的答案之一。我不明白它是如何一天工作的,而下一天它却无法正常工作。
【问题讨论】:
-
在任何情况下,您都应该将
os.system替换为subprocess.run,但我看不出如果它以前工作过,它怎么会停止工作。错误消息表明,无论os.system在幕后使用什么 shell,都已停止将其视为单个路径,并开始将其视为路径加参数,在Test和UI之间的空格上拆分。 -
这很奇怪。它似乎与名称中的空格混淆了。您可以尝试
os.system(r'"C:\Users\red\Desktop\Test UI"')- 我只是将字符串用单引号括起来,这样双引号实际上会转到 Windows 进程执行。 -
...嗯,我假设要运行的文件是“Test UI.exe”
-
请注意,在链接问题的答案中,使用的是
subprocess.call,而不是os.system。当您不在前者上使用shell=True时,这些是非常不同的事情。subprocess.call不会尝试使用默认的shell=False进行任何类型的字符串拆分,而os.system期望所有内容都以本地 shell 的语法传递(这需要引用或转义空格,尽管详细说明如何是特定于平台的)。 -
@tdelaney 实际上只是测试用户界面,它是打开谷歌浏览器标签并将我带到某个页面的快捷方式。我尝试使用您推荐的单引号,然后使用您推荐的双引号方法,但我仍然得到与问题中提到的相同的错误。