【问题标题】:Python - Errno 2: No such file or directoryPython - Errno 2:没有这样的文件或目录
【发布时间】:2019-10-15 19:44:06
【问题描述】:

所以,我试图使用subprocess.Popen() 在 CMD 中以“复杂”的方式打开一个 python 脚本。尽管由于我的 PC 名称中有空格,我无法打开它。我试过使用双引号和单引号,但它仍然不起作用。

这是我试图执行的代码行。

subprocess.Popen("cmd.exe /C python '\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\bootthingy.py'")

如您所见,我使用单引号来包裹目录路径,但这是我在执行时遇到的错误。

C:\Users\Terra Byte\Desktop\jdos3\JDOS3>python: can't open file ''\Users\Terra': [Errno 2] No such file or directory

似乎完全忽略了我的单引号。

【问题讨论】:

  • 将参数作为 list 传递,并使用原始字符串。

标签: python cmd errno


【解决方案1】:

永远不要尝试将您的命令名称构建为 字符串

在这种特殊情况下,请注意单引号对 Windows 没有保护作用(与 Linux/Unix 不同),这说明您使用的引用效率低下。使用双引号会起作用,但这不是最好的方法。

当您可以传递参数的列表 时,切勿使用字符串。这将起作用:

subprocess.Popen(["python",r'\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\bootthingy.py'])
  • 使用不带引号的字符串列表,让subprocess 完成工作
  • 删除 cmd /c 前缀,因为 python 前缀就足够了(或者,删除 python 以保留 ["cmd","/c" 并让文件关联完成工作)
  • 使用原始字符串前缀来避免反斜杠被解释

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多