Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2016 11:51:46

Dathy
Зарегистрирован: 2016-02-24
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Управление запущенным процессом

Пишу вот так

pc = Popen('start cmd /K' + zapros, shell=True)
потом проверяю
while True:
    print pc.wait()
    time.sleep(1)
первый вывод None потом пишет нули, хотя в CMD приложение запущенное еще работает..
Но почему то pc.wait() или pc.poll() возвращает 0 уже на вторую секунду..
Попробовал через multiprocess и все равно тоже самое, метод is_alive() возвращает False хотя процесс работает… Подскажите пожалуйста, что не так то?

Офлайн

#2 Март 1, 2016 15:34:13

Dathy
Зарегистрирован: 2016-02-24
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Управление запущенным процессом

подскажите хоть куда курить-то, я не понимаю почему не работает..

Офлайн

#3 Март 1, 2016 20:27:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Управление запущенным процессом

Dathy
метод is_alive() возвращает False
Ну наверное так и есть.

Есть команда tasklist. Она покажет что работает что нет. Посмотрите pid процесса который запустили.

И ваша идея непонятна start да еще cmd /K зачем этот огород?
Чем вас это не устраивает?
pc = Popen(zapros, shell=True)

А еще лучше если получится то так:
pc = Popen(zapros)



Офлайн

#4 Март 2, 2016 03:06:54

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Управление запущенным процессом

Dathy
я не понимаю почему не работает..
Все работает. cmd /K запускает новую консоль (процесс) и завершает работу, а новая консоль (процесс) живет своей жизнью.
doza_and
Посмотрите pid процесса который запустили
Это будет PID завершенного процесса, поэтому смотреть на него не интересно :)
doza_and
И ваша идея непонятна start да еще cmd /K зачем этот огород?
Иногда возникает необходимость видеть результат выполнения запущенного дочернего процесса и при этом не портить вывод родительского процесса.
Dathy
Попробуйте так (только для windows):
import subprocess as sp
DETACHED_PROCESS = 0x00000008
p = sp.Popen(zapros, shell=True, creationflags=DETACHED_PROCESS)



Отредактировано pyuser (Март 2, 2016 03:23:19)

Офлайн

#5 Март 2, 2016 20:30:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Управление запущенным процессом

pyuser
Это будет PID завершенного процесса, поэтому смотреть на него не интересно :)
Как раз интересно, он должен увидеть что процесса нет. Чел спросил куда смотреть. Смотреть надо на то что и в каком порядке запускалось :).

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

pyuser
видеть результат выполнения запущенного дочернего процесса
А не проще унаследовать с другим stdout или перенаправить результат в файл? Но допускаю, что это дело привычки.



Отредактировано doza_and (Март 2, 2016 20:37:38)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version