好的,所以我目前最好的猜测是我以某种方式严重搞砸了我的 python 环境,我不知道怎么做。
首先,我尝试卸载并重新安装(实际上是从 2.7.14 升级到 .15(python 无济于事。 问题仍然存在。
据我所知,问题描述:
我正在尝试从Python 2.7.15(displayswitch.exe调用Windows本机二进制文件,该二进制文件在C:\Windows\System32\中得到了验证。注意:我没有错过双斜杠,由于某种原因,堆栈溢出正在带走尾随的斜杠。可能是一个转义序列。
有一次,这工作得很好,这让我相信我搞砸了什么。截至目前,我能够从Windows命令提示符下调用displayswitch和任何其他本机命令,但是从os.system运行完全相同的命令,subprocess.call分别给我错误"displayswitch未被识别为内部或外部命令"和"WindowsError:系统找不到指定的文件"。
以下是我正在运行的确切内容片段,出于健全的原因从命令行复制
:(多(
displayswitch.exe --> runs fine
(蟒蛇解释器(
import os
os.system("displayswitch.exe")
--> 'displayswitch' is not recognized as an internal or external command,
operable program or batch file.
1
(蟒蛇解释器(
import subprocess
subprocess.call(["displayswitch.exe"])
--> WindowsError: [Error 2] The system cannot find the file specified
我的第一直觉是我搞砸了我的路径变量(这又是一个很长的镜头,因为我没有用 30 英尺的杆子碰过它(,但是如果我打印出 os.environ["PATH"],则指向 C:\Windows\System32 的路径就在那里(我把它分成分号,这样更容易看到(:
C:\Python27\;
C:\Python27\Scripts;
C:\Program Files (x86)\Common Files\Oracle\Java\javapath;
C:\Program Files (x86)\Razer Chroma SDK\bin;
C:\Program Files\Razer Chroma SDK\bin;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\PuTTY\;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
C:\Program Files\TortoiseSVN\bin;
C:\Users\iwasf\AppData\Local\Microsoft\WindowsApps;
C:\sqlite;
C:\Program Files (x86)\WinMerge;
C:\WINDOWS\system32;
C:\WINDOWS;
C:\WINDOWS\System32\Wbem;
C:\WINDOWS\System32\WindowsPowerShell\v1.0\;
C:\WINDOWS\System32\OpenSSH\;
C:\Program Files\Git\cmd;
C:\Program Files\Git\mingw64\bin;
C:\Program Files\Git\usr\bin;
C:\Users\iwasf\PycharmProjects\PyBedTime\lib\ffmpeg\bin;
C:\GLUT;
C:\GLUT\include;
C:\Users\iwasf\AppData\Local\Microsoft\WindowsApps;
但是,嘿,在消除中间人的本质中,我继续尝试调用可执行文件的完整路径(即 C:\Windows\System32\displayswitch.exe(,结果完全相同(我也尝试区分大小写,即 DisplaySwitch.exe如果这很重要,它没有(。
3 年来我从未遇到过这样的问题,我真的不知道该尝试什么。我什至尝试重新启动我的电脑,它的工作与预期一样多。
有关我的环境的其他信息以及由于某种原因可能导致此问题的原因: 使用 PyCharm 2018.2.2 IDE,它为项目创建和使用 virtualenv。
对于这个问题第一次出现时我一直在做的副项目,我最初将python 3.6.6与flask,pigpio和pyaudio一起使用(在树莓派上运行(,但是当我遇到mod_wsgi障碍并将其安装到python 3.6时,将所有内容切换到python 2.7,而python 3.6没有任何内容。
在 PyCharm 中,我将其配置为同时使用本地解释器和远程解释器,所有这些都完美无缺。os.system 的问题发生在我从 3.6 切换回 2.7 之后的某个时间,但我不能直接保证这是确切的根本原因。我使用 2.7 制作了一个新的 virtualenv,并使用 3.6 从我的项目中删除了旧的虚拟环境。
我已经对这个问题进行了一些中级谷歌搜索,但 90% 的结果是人们输入了错误的命令,或者他们被指示使用子进程来避免参数传递等问题。但是当我尝试了这两种命令并且相同的命令在命令提示符下工作时,我已经说服自己,这不可能是我的打字技巧。
编辑:刚刚想到再次尝试使用python 3.6,它工作正常,我更加困惑。如果这是特定于 2.7 的问题,我会认为重新安装会修复它。
问题是 32 位 python 与 64 位,我想我知道是什么破坏了它,因为当我重新安装时,我同时安装了 32 位和 64 位 python。我卸载了 32 位版本的 os 2.7.15 并安装了 64 位,它现在可以工作了。感谢 Alex K 指出重定向,并为这个愚蠢的问题感到抱歉!