Хорошо, поэтому мое лучшее предположение в настоящее время заключается в том, что я как-то сильно испортил свою среду Python, и я понятия не имею, как.
Прежде всего, я попытался удалить и переустановить (на самом деле обновление с 2.7.14 до .15) python безрезультатно.проблема сохраняется.
Описание проблемы, насколько я понимаю, так:
Я пытаюсь вызвать собственный двоичный файл Windows из Python 2.7.15 (displaywitch.exe, который проверен, существует вC: \ Windows \ System32 \). Примечание: я не пропустил двойные слэши, переполнение стека по какой-то причине убирает концевые.Вероятно, это побег.
В какой-то момент это работало очень хорошо, и это заставило меня поверить, что я что-то напортачил.На данный момент я могу вызывать displaywitch и любую другую встроенную команду из командной строки Windows, но, выполнив точно такую же команду из os.system, subprocess.call выдает ошибки «displaywitch не распознается каквнутренняя или внешняя команда "и" 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
Моим первым инстинктом было то, что я облажалсяпеременная пути (что опять-таки является длинным выстрелом, потому что я не коснулся ее полюсом 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: \Окноs \ 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, из своего проекта.
Я выполнил поиск в Google среднего уровня по этой проблеме, но 90% результатов были людьми, набравшими неверную команду, или онимне было поручено использовать подпроцесс, чтобы избежать проблем с передачей параметров и т. д. Но поскольку я пробовал обе эти команды, одна и та же команда работает из командной строки, я убедил себя, что это не может быть моими навыками набора текста.
РЕДАКТИРОВАТЬ: Только что подумал попробовать еще раз с Python 3.6, который работает отлично, и я еще более озадачен.Если бы это была проблема, специфичная для 2.7, я бы подумал, что переустановка исправит это.