ОС и подпроцесс больше не находят двоичные файлы в Windows 10 - PullRequest
0 голосов
/ 03 октября 2018

Хорошо, поэтому мое лучшее предположение в настоящее время заключается в том, что я как-то сильно испортил свою среду 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, я бы подумал, что переустановка исправит это.

1 Ответ

0 голосов
/ 03 октября 2018

Проблема была в 32-битном Python по сравнению с 64-битным, и я думаю, что знаю, что сломало его, потому что, когда я переустанавливал, у меня был установлен как 32-битный, так и 64-битный Python.Я удалил 32-битную версию OS 2.7.15 и установил 64-битную версию, и теперь она работает.Спасибо Alex K за указание на перенаправление и извините за глупый вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...