【问题标题】:Strange Windows/Python/Popen Issue奇怪的 Windows/Python/Popen 问题
【发布时间】:2013-06-13 06:22:26
【问题描述】:

当我运行以下命令时:

import subprocess
subprocess.check_call('dir', shell=True)

结果总是显示C:\的内容,无论我在哪个目录中启动了Python解释器。我什至试过这个:

import subprocess
subprocess.check_call('dir', shell=True, cwd='C:\\foo\\bar\\baz')

这也不起作用。我也无法使用 Scons(基于 Python 的构建工具)构建应用程序,原因似乎相同:

scons: Building targets ...
cl /Fobuild\Animation.obj /c src\Animation.cpp /TP /DSFML_STATIC /EHsc /MD /Zi /Ideps/Box2D_v2.2.1 / Ideps/LuaJIT-2.0.2/src /Ideps/SFML-2.0/include /Ideps/include /nologo
Animation.cpp
c1xx : fatal error C1083: Cannot open source file: 'src\Animation.cpp': No such file or directory
scons: * [build\Animation.obj] Error 2
scons: building terminated because of errors.

请注意,src\Animation.cpp 实际上确实 存在。我假设这发生在 b/c cl.exe 是从 C:\ 运行而不是 Python 解释器运行的实际位置。

我认为这可能是我的环境变量的问题,但我检查了它们,一切似乎都正常。我还删除/重新安装了 Python,但无济于事。

这是怎么回事?

【问题讨论】:

  • print(os.getcwd()) 的输出是什么?
  • 也可以尝试不使用shell=True。它在运行 shell 时可能会出现奇怪的行为,而您通常不需要它。
  • 丢弃不必要的() 参数。

标签: python windows popen


【解决方案1】:

您应该转义“\”或使用原始字符串 (r'....')。

>>> 'C:\foo\bar\baz'
'C:\x0coo\x08ar\x08az'
>>> r'C:\foo\bar\baz'
'C:\\foo\\bar\\baz'

【讨论】:

  • 或者使用 / 作为目录分隔符。
  • 转录错误。在我的代码中,我实际上确实转义了反斜杠。
  • import os; print(os.getcwd())的输出是什么
【解决方案2】:

修好了!问题是注册表中的自动运行设置......不确定它是如何设置的,但确实如此。要解决此问题,请访问:

HKEY_CURRENT_USER\Software\Microsoft\Command Processor

在注册表中,删除自动运行设置。我的 AutoRun 看起来像这样:

cd C:\

这完全搞砸了。

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多