Я пытаюсь использовать подпроцесс для вызова моего текущего скрипта следующим образом:
import subprocess as sb
current_path = os.path.realpath(__file__)
sb.call(['python3', current_path])
Тем не менее, я заканчиваю:
FileNotFoundError: [WinError 2] The system cannot find the file specified
Что я могу делать неправильно?
python3.exe
не существует ни в одном из путей в вашей PATH
переменной окружения. Вместо этого используйте абсолютный путь, чтобы указать python3.exe
, или используйте аргумент shell=True
:
sb.call(['python3', current_path], shell=True)
Спасибо. Однако я могу запустить команду python3
из командной строки, так что это должно означать, что она существует в моей переменной PATH, верно?
Является ли ваша команда python3
псевдонимом оболочки или реальным исполняемым файлом?
На самом деле он может запускать скрипт Python (я не уверен, что такое псевдоним оболочки). Например, если я запускаю из cmd: python3 testing_keyboard_input.py
или python3.6 testing_keyboard_input.py
, он запускает определенный скрипт.
Хорошо, ваше обновление работает (с shell = True
). Судя по примерам, которые я видел, они не использовали shell = True
. Это нюанс винды?
Псевдоним оболочки — это ярлык в командной строке, который понимает только командная строка (оболочка), обычно это делается с помощью команды doskey
в Windows.
Я не думаю, что у вас на самом деле есть исполняемый файл python3.exe
или python3.6.exe
, а только псевдоним python3
и python3.6
в оболочке, который указывает на python.exe
в каталоге Python 3, поэтому без shell=True
система не может найти данную команду.
Рассмотрите возможность использования прокмон, чтобы узнать, к каким путям осуществляется доступ, и результат, полученный для каждой попытки.