好的,目前我的最佳猜测是我以某种方式严重破坏了我的python环境,但我不知道如何。

首先,我尝试卸载并重新安装python(实际上是从2.7.14升级到.15)无济于事。问题仍然存在。

据我所知,问题描述是最好的:

我正在尝试从Python 2.7.15(displayswitch.exe,已验证存在于C:\ Windows \ System32 \中)调用Windows本机二进制文件。注意:我没有错过双斜杠,由于某些原因,堆栈溢出正在消除尾随的斜杠。可能是转义序列。

在某一点上,它工作得很好,这使我相信自己搞砸了。到目前为止,我能够调用displayswitch,并且从Windows命令提示符下也可以调用任何其他本机命令,但是从os.system,subprocess.call运行完全相同的命令会给我错误“显示开关无法识别为内部或外部命令”和“ WindowsError:系统找不到指定的文件”。

以下是我正在运行的代码段,出于理智的考虑,从命令行复制了这些代码段:

(剂量)

displayswitch.exe --> runs fine


(python解释器)

import os
os.system("displayswitch.exe")
--> 'displayswitch' is not recognized as an internal or external command,
    operable program or batch file.
    1


(python解释器)

import subprocess
subprocess.call(["displayswitch.exe"])
--> WindowsError: [Error 2] The system cannot find the file specified


我的第一个直觉是我搞砸了我的path变量(这又是一个漫长的尝试,因为我还没有用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在的情况下,没关系)。

我三年来从未遇到过这样的问题,即使尝试什么我也真的很茫然。我什至尝试重新启动PC,效果与预期的一样。

有关我的环境以及由于某些原因可能导致此问题的其他信息:
使用PyCharm 2018.2.2 IDE,该IDE创建并使用virtualenv用于项目。

对于最初出现此问题时我一直在进行的辅助项目,我最初使用的是python 3.6.6,烧瓶,piggio和pyaudio(在树莓派上运行),但是当遇到障碍时,一切都切换到了python 2.7使用mod_wsgi并将其安装在没有任何Python的python 3.6上。

在PyCharm中,我将其配置为同时使用本地解释器和远程解释器,所有这些都可以正常工作。 os.system的问题发生在我从3.6切换到2.7之后的某个时间,但是我不能直接保证是否是确切的根本原因。我使用2.7创建了一个新的virtualenv,并使用3.6从我的项目中删除了旧的virtualenv。

我已经在这个问题上进行了一些中级搜索,但是90%的结果是人们输入了错误的命令,或者指示他们使用子进程来避免参数传递等问题。但是正如我尝试过的一样命令在命令提示符下有效,我已经使自己确信这不是我的打字技能。

编辑:只是有想法再次尝试使用python 3.6,它工作正常,我更加困惑。如果这是2.7特有的问题,我会认为重新安装会解决该问题。

最佳答案

问题是32位python和64位,而我想我知道是什么原因造成的,因为当我重新安装时,我同时安装了32位和64位python。我卸载了32位版本的os 2.7.15并安装了64位版本,并且现在可以正常工作。感谢Alex K指出了重定向,并为这个愚蠢的问题感到抱歉!

关于python - 操作系统和子进程不再在Windows 10上找到二进制文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52629933/

10-09 20:18
查看更多