Как я закрываю stdout-канал, когда уничтожение процесса, запущенного с Python, подобрабатывает Popen?

Какую операционную систему вы используете? Я понял из вашего тега C #, что это windows?

Если это так, проверьте WMI, особенно класс Win32_Process. Вот ссылка на MSDN: http://msdn.microsoft.com/en-us/library/aa394372 (VS.85) .aspx

, а также пара сценариев использования здесь (например, получение списка процессов): http://msdn.microsoft.com/en-us/library/aa394599 (VS.85) .aspx

9
задан Community 23 May 2017 в 02:16
поделиться

2 ответа

It seems to me that the easiest way to do this and sidestep the multithreading problems would be to set a kill flag from the main thread, and check for it in the script-running thread just before the communication, killing the script when the flag is True.

0
ответ дан 3 November 2019 в 07:13
поделиться

Похоже, вы можете стать жертвой супергрубого параллелизма Python. Измените ваш сценарий на этот:

#!/bin/bash
echo "sleeping five"
sleep 5
echo "sleeping five again"
sleep 5
echo "slept five"

И тогда результат будет следующим:

process: sleeping five

real    0m5.134s
user    0m0.000s
sys     0m0.010s

Если бы весь сценарий был запущен, время было бы 10 секунд. Таким образом, похоже, что поток управления python фактически не запускается до тех пор, пока сценарий bash не засыпает. Точно так же, если вы измените свой сценарий на этот:

#!/bin/bash
echo "sleeping five"
sleep 1
sleep 1
sleep 1
sleep 1
sleep 1
echo "slept five"

Тогда вывод станет:

process: sleeping five

real    0m1.150s
user    0m0.010s
sys     0m0.020s

Короче говоря, ваш код работает как логически реализованный. :)

-1
ответ дан 3 November 2019 в 07:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: