2016-05-31 3 views
2

Я пытаюсь создать пакетный сценарий или запланированное задание, которое может работать следующим образом:для Windows Пакетный запуск питон скрипт с трубой

pythonw manage.py runserver >nul 

Это будет работать, если я написал это из командной строки и возвращает меня в , но если я попытаюсь запустить его с помощью командного файла или запланированной задачи, он откроет окно и заблокирует его в этой команде. Окно, которое я закрою, добавит окончательный «выход», но он будет заблокирован в первой команде, если я не убью процесс в диспетчере задач.

Как это сделать? если он работает в обычном cmd, почему бы не работать так же, как в файле .bat или .cmd?

+1

Я не знаю python, но pythonw - программа графического интерфейса, поэтому не имеет доступа к консоли, которая ее запускает. Поэтому '> nul' не имеет смысла. Однако ваша конкретная проблема - это что-то еще - в пакетной CMD ждет выхода программ GUI (интерактивно CMD только ждет консольных программ). См. «Start /?» Для справки об этом (он объясняет запуск программ с использованием и без использования «start» - новое поведение происходит из Windows 2000 по сравнению с Windows NT4). Вероятно, вы должны использовать 'python', однако см.' Start/w', если вы хотите использовать пиктон GUI в консоли, для которой он не предназначен. –

+0

Часть с> nul - это потому, что manage.py - это сценарий django, который не предназначен для запуска таким образом и использует stdout в каждом действии, которое вы выполняете с создаваемым им веб-сервером. Это обходной путь для запуска сервера Django dev при запуске без консоли и без регистрации только для тестирования hardcore. – fdzworkzone

+1

Я имел в виду 'start' без'/w'. –

ответ

1

Хорошо, после тестирования все больше и больше я нашел что-то, что работает. Извините за вопрос, не ищите и не проверяйте больше.

Это то, что работает:

CMD /c start "" /B path\to\pythonw.exe path\to\manage.py runserver > nul ^& exit 

Внутри CMD-файл. Выполнение файла запускает веб-сервер Django dev правильно и запланированное задание, которое запускает этот .cmd-файл, также запускает сервер.

+0

Что произойдет, если вы просто используете 'start '"/B path \ to \ pythonw.exe путь \ to \ manage.py runningerver> nul'? '/ B' требуется, чтобы заставить cmd.exe установить дескриптор' stdout', но зачем вам 'cmd/c ...^& exit'? pythonw.exe не использует консоль, поэтому не должно быть проблем; партия должна просто продолжить и выйти. 'start '"/B pythonw.exe -c "время импорта, time.sleep (60)"> nul' отлично работает для меня. И если я присоединяю отладчик, я вижу, что '@ $ peb-> ProcessParameters-> StandardOutput' является устройством' nul', а 'StandardInput' и' StandardError' не заданы как 'NULL'. – eryksun

+0

Ну, я действительно не знаю, зачем мне это нужно, но я знаю, что без него, когда я его запустил, он откроет окно команд и не закроет его, если я не сделаю это вручную. Кроме того, проблема заключается в том, что способ manage.py работает – fdzworkzone

Смежные вопросы