Как сделать так, чтобы Python.exe оставался открытым при запуске из планировщика задач Windows

Я запускаю файл .py из Планировщика задач Windows. Для большинства файлов это нормально работает следующим образом:

  1. Создать новую задачу в TS
  2. В TS на вкладке «Действия» в разделе «Программа / сценарий:» укажите путь к python.exe (Пример: C: \ Users \ User \ Python.exe)
  3. В TS в разделе «Добавить аргументы» добавьте путь к файлу .py в кавычках (пример: «C: \ Path \ To \ Py \ pythonfiletorun.py»)

Когда это работает правильно, Python.exe появляется на долю секунды, запускает программу и исчезает.

Однако у меня есть один файл .py, который не работает. Когда я пытаюсь запустить его из консоли QT, он работает нормально. Когда я использую процесс TS, он терпит неудачу. И Python.exe закрывается так быстро, что я не вижу, что не так.

Я попытался преобразовать все в пакетный файл, так что «Программа / сценарий» становится «cmd», а «Добавить аргументы» становится: / k «C: \ Path \ To \ batchfile.bat», в котором затем хранятся пути и инструкции.

Это открывает командную строку (и оставляет ее открытой), но отсюда основная командная строка открывает командную строку python.exe, которая запускается и закрывается так же быстро.

Я пытался разместить / k в разных местах, но безрезультатно.

Я также попытался поместить квалификатор ввода в конец сценария .py (например, input («Нажмите любую клавишу, чтобы ...») в надежде, что команда Python.exe останется открытой, но это не так.

В конечном итоге мне нужна команда Python.exe, чтобы оставаться открытым и видеть, что не так.


person GC123    schedule 22.03.2017    source источник
comment
Зачем использовать TS для отладки неправильного скрипта? Разве нельзя просто запустить командный файл без TS?   -  person Thomas Weller    schedule 22.03.2017
comment
@ThomasWeller Сценарий действительно отлично работает при запуске из iPython QT Console, но когда он запускается из TS, он терпит неудачу. Идея, лежащая в основе пакетного файла, заключалась в том, что он позволяет аргументу / k останавливать Python.exe. Немногое из моей базы знаний нашел это в Интернете, поэтому попробовал.   -  person GC123    schedule 22.03.2017
comment
как насчет добавления -i к вашим аргументам, чтобы активировать интерактивный режим после запуска (или сбоя)   -  person Aaron    schedule 22.03.2017
comment
Если вы используете встроенную команду start cmd в пакетном файле, обратите внимание, что по умолчанию она создает новую консоль. Либо не используйте его, либо добавьте параметры /b /w, чтобы он использовал текущую консоль и подождите. Или просто запустите его без командного файла, например что-то вроде cmd.exe /k ""path\to\python.exe" "path\to\script.py"". Предложение Аарона использовать параметр Python -i также должно сработать.   -  person Eryk Sun    schedule 22.03.2017
comment
@ Аарон не знаком с этим. Я предполагаю, что это войдет в TS? Имеет ли значение размещение?   -  person GC123    schedule 22.03.2017
comment
@ GC123 это optarg для python ... C:\some\folder>python script.py -i. вызов >python -h из окна cmd для всех опций   -  person Aaron    schedule 22.03.2017
comment
Я не имею в виду iPython Qt Console. Я говорю о запуске командного файла в cmd.   -  person Thomas Weller    schedule 22.03.2017
comment
Допустим, я не использую cmd, а просто хочу поместить путь к Python.exe и файлу .py в TS. Как мне остановить python.exe (или получить проблемы, которые он печатает за долю секунды)? Большинство ответов, похоже, больше сосредоточены на cmd, который я не очень хорошо знаю, и попытки заморозить cmd по-прежнему не останавливают закрытие python.exe (или я делаю это неправильно).   -  person GC123    schedule 22.03.2017
comment
возможно, вы сможете использовать функцию getch() в модуле mscvrt. См. Python считывает один символ от пользователя < / i>, чтобы сделать паузу до нажатия символа.   -  person martineau    schedule 22.03.2017
comment
@Aaron, опция -i стоит перед именем скрипта, например. "path\to\python.exe" -i "\path\to\script.py".   -  person Eryk Sun    schedule 22.03.2017
comment
@ GC123 Я ожидаю, что планировщик задач будет работать аналогично cmd, поэтому, если вы можете заставить его делать то, что хотите, вы сможете реплицировать его с помощью TS   -  person Aaron    schedule 22.03.2017
comment
@eryksun хороший улов, я бы понял это раньше.   -  person Aaron    schedule 22.03.2017
comment
@martineau, если OP не обрабатывает все возможные исключения, то можно с этим справиться с помощью -i REPL или родительской оболочки cmd /k. Параметр -i подходит для всего, кроме сбоя. Если Python дает сбой (например, исключение нарушения прав доступа Windows), то можно использовать оболочку cmd /k.   -  person Eryk Sun    schedule 23.03.2017
comment
Можете ли вы опубликовать фрагмент этого .py-кода? Он подключается к серверу? Вызов файлов по относительным путям? Планировщик задач использует администратора, а не локального пользователя, поэтому следует разрешить чтение / запись файлов.   -  person Parfait    schedule 23.03.2017
comment
Передайте вывод в файл и посмотрите, в чем ошибка. Отладка 101.   -  person David Heffernan    schedule 23.03.2017


Ответы (1)


Итак, приведенный ниже подход сработал (спасибо всем за их вклад).

Сначала создайте командный файл, в котором говорится:

start C:\Users\Path\To\Python.exe C:\Users\Path\To\PyFileToRun.py 

Перейдите туда, где это сохранено, и дважды щелкните, чтобы убедиться, что это работает. Как только это сработает, скопируйте его заново с «-i» между путем Python.exe и путем к файлу .py следующим образом:

start C:\Users\Path\To\Python.exe -i C:\Users\Path\To\PyFileToRun.py 

Теперь заходим в TS и в «Программа / скрипт» вставляем:

C:\Users\Path\To\BatchFile.bat

Оставьте поле «Аргументы» в TS пустым.

Теперь запустите задачу TS, она должна запуститься и оставить Python.exe открытым, чтобы вы могли изучить проблемы.

Еще раз спасибо всем

person GC123    schedule 23.03.2017
comment
Учитывая все, что было сказано в комментариях выше, почему вы все еще используете командный файл и команду start? Планировщик задач может просто запустить либо "C:\Users\Path\To\Python.exe" с аргументами, установленными как -i "C:\Users\Path\To\PyFileToRun.py", либо вместо этого запустить cmd.exe с аргументами, установленными как /k ""C:\Users\Path\To\Python.exe" -i "C:\Users\Path\To\PyFileToRun.py"". - person Eryk Sun; 23.03.2017
comment
@eryksun Я в основном возился, пока не получил что-то, что работало (ответ выше), и перестал искать другие решения. - person GC123; 23.03.2017
comment
Это было огромным подспорьем. Я смог разобраться в проблеме. Спасибо! - person TravisVOX; 31.05.2019