操作系统和子进程不再在Windows 10上找到二进制文件

时间:2018-10-03 14:56:00

标签: python python-2.7 windows-10 subprocess python-os

好吧,所以目前我最好的猜测是我以某种方式严重破坏了我的python环境,我也不知道该怎么做。

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

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

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

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

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

(dos)

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,它可以为项目创建和使用virtualenv。

对于这个问题刚出现时我一直在进行的辅助项目,我最初将python 3.6.6与flask,piggio和pyaudio一起使用(在树莓派上运行),但是当我将所有内容切换到python 2.7时使用mod_wsgi遇到障碍,并为python 3.6安装了它,但没有任何帮助。

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

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

编辑:只是想过再次使用python 3.6进行尝试,效果很好,我感到更加困惑。如果这是2.7特有的问题,我会认为重新安装会解决此问题。

1 个答案:

答案 0 :(得分:1)

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