Найти - Пользователи
Полная версия: CTRL+C не доходит до подпроцесса
Начало » Python для новичков » CTRL+C не доходит до подпроцесса
1
alex.black
Приветствую, прошу помочь с проблемой: имею необходимость завершить подпроцесс popen, делать это пытаюсь в два этапа: prc.send_signal(signal.CTRL_C_EVENT) + prc.stdin.write(….), но проблема какраз в том, первое отрабатывает 1/10 раз, что никак не устраивает - прошу подсказать что неверно делаю

doza_and
1 Приведите код как вы это делаете.
2. можно попробовать жестче поступить. У результата popen есть метод kill()
alex.black
doza_and
1 Приведите код как вы это делаете.2. можно попробовать жестче поступить. У результата popen есть метод kill()

 prc = subprocess.Popen(prog, stdin=subprocess.PIPE, stdout=stream)
pid = prc.pid
while psutil.pid_exists(pid):
    if  time> time_allowed and signaled == False:
        prc.send_signal(signal.CTRL_C_EVENT)
        prc.stdin.write('Y\n'.encode())
        signaled = True
    time.sleep(1)
    time= time+ 1

жестче увы нельзя, нужно сохраниться, а не просто убить процесс
alex.black
Подскажите как исправить код, пожалуйста
JOHN_16
Винды у меня нет под рукой, вот вам быстрый рабочий пример под никсами. Для винды возможно надо поменять сигнал на тот который в Вашем примере.
py_main.py:
 import time
def main():
    counter = 0
    while True:
        try:
            print(counter)
            counter += 1
            time.sleep(1)
        except KeyboardInterrupt:
            s = input('Are you sure? Y/N')
            if s == 'Y':
                print('Good Bye')
                break
if __name__ == '__main__':
    main()

py_sec.py:
 import subprocess
import time
import signal
sp = subprocess.Popen(['python3', 'py_main.py'], stdin=subprocess.PIPE)
time.sleep(3)
sp.send_signal(signal.SIGINT)
time.sleep(0.25)
sp.stdin.write('Y\n'.encode())
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB