ОС и подпроцесс больше не находят двоичные файлы в Windows 10
Итак, мое лучшее предположение в настоящее время заключается в том, что я как-то сильно испортил свою среду Python, и я понятия не имею, как.
Во-первых, я попытался удалить и переустановить (на самом деле обновление с 2.7.14 до.15) python безрезультатно. проблема сохраняется.
Описание проблемы так хорошо, как я понимаю:
Я пытаюсь вызвать собственный двоичный файл Windows из Python 2.7.15 (displaywitch.exe, который проверен в C:\Windows\System32\). Примечание: я не пропустил двойную косую черту, переполнение стека по какой-то причине убирает завершающие. Вероятно, последовательность побега.
В какой-то момент это работало просто отлично, и это заставило меня поверить, что я что-то напортачил. На данный момент я могу вызывать displaywitch и любую другую встроенную команду из командной строки Windows, но, выполнив точно такую же команду из os.system, subprocess.call выдает мне ошибки "displaywitch не распознается как внутренняя или внешняя команда "и"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
Моим первым инстинктом было то, что я облажался с моей переменной пути (что опять-таки является длинным выстрелом, потому что я не коснулся ее с 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\displaywitch.exe) с теми же точными результатами (я также попробовал вводить с учетом регистра, то есть DisplaySwitch.exe в дело, которое имело значение, это не).
У меня никогда не было таких проблем за 3 года, и я действительно в недоумении, что даже попробовать. Я даже попытался перезагрузить мой компьютер, который работал так же, как ожидалось.
Другая информация о моей среде и о том, что могло вызвать это по какой-то причине: Использование PyCharm 2018.2.2 IDE, которая создает и использует virtualenv для проектов.
Для побочного проекта, над которым я работал, когда эта проблема возникла впервые, я изначально использовал python 3.6.6 с flask, pigpio и pyaudio (запускал его на Raspberry Pi), но переключился на python 2.7, когда столкнулся с препятствием с mod_wsgi и установкой его для python 3.6, в котором ничего не было.
В PyCharm я настроил его для использования как локального, так и удаленного переводчика, и все это работало безупречно. Проблема с os.system произошла через некоторое время после того, как я переключился с 3,6 на 2,7, но я не могу прямо подтвердить, что это точная причина или нет. Я сделал новый virtualenv, используя 2.7, и удалил старый, используя 3.6, из своего проекта.
Я занимался поиском на промежуточном уровне по этой проблеме, но 90% результатов были людьми, которые неправильно набрали команду, или им было приказано использовать подпроцесс, чтобы избежать проблем с передачей параметров и т. Д. Но, как я пробовал и то и другое команда работает из командной строки. Я убедил себя, что это не могут быть мои навыки набора текста.
РЕДАКТИРОВАТЬ: Просто подумал попробовать еще раз с Python 3.6, который работает отлично, и я еще более озадачен. Если бы это была проблема, специфичная для 2.7, я бы подумал, что переустановка исправит это.
1 ответ
Проблема была в 32-битном Python по сравнению с 64-битным, и я думаю, что знаю, что сломало его, потому что, когда я переустанавливал, у меня был установлен как 32-битный, так и 64-битный Python. Я удалил 32-битную версию OS 2.7.15 и установил 64-битную версию, и теперь она работает. Спасибо Alex K за указание на перенаправление и извините за глупый вопрос!