2010-07-10 6 views
1

Можно ли использовать Popen из подпроцесса python для закрытия процесса? Например, из popen запускаю какое-то приложение. В какой-то части моего кода мне нужно закрыть это приложение. Например, из консоли в Linux я:Закрытие процесса

./some_bin 
... It works and logs stdout here ... 
Ctrl + C and it breaks 

мне нужно что-то вроде Ctrl + C, но в моем программном коде.

ответ

2
from subprocess import Popen 
process = Popen(['slow', 'running', 'program']) 
while process.poll(): 
    if raw_input() == 'Kill': 
     if process.poll(): process.kill() 

kill() будет убить процесс. См. Больше здесь: Python subprocess module

+0

Вы уверены, что не смешали два условия? Разве это не должно быть 'while process.poll(): if raw_input() == 'Kill''? – zneak

+0

Ваша версия будет по-прежнему блокироваться на 'raw_input()', точно так же, как моя, за исключением моих проверок, что процесс выполняется непосредственно перед тем, как мы попытаемся убить его, были как ваши проверки перед блокировкой 'raw_input()', что означает процесс мог закончиться, прежде чем мы попытаемся его убить. –

+0

Речь идет не о блокировке, а о цикле. Ваша петля вообще не будет петля. Если вы наберете «Убить», он остановится. И если вы не набираете «Kill», он также останавливается. За исключением того, что в этом случае процесс все еще запущен. С другой стороны, решение, которое я предлагаю, будет, действительно, петлей. – zneak

2

Используйте модуль subprocess.

import subprocess 

# all arguments must be passed one at a time inside a list 
# they must all be string elements 
arguments = ["sleep", "3600"] # first argument is the program's name 

process = subprocess.Popen(arguments) 
# do whatever you want 
process.terminate() 
+0

Вы используете shure в 'subprocess.terminate()'? Может быть, 'process.terminate()'? – Ockonal

+0

Черт! Я имел в виду 'process.terminate()', действительно. Я исправлю это. – zneak

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