2013-03-06 5 views
1

У меня есть утилита командной строки от canutils под названием candump. Вот как это работает:завершение утилиты командной строки linux из python

Я бегу candump (с указанием на автобус, из которого я хочу сбросить)

[email protected]: candump can0 

Затем он работает, пока не закончится его с помощью CTRL+C

Однако, когда я запускаю его в такой скрипт python.

Popen(["candump","can0"],stdout=PIPE) 

или

call(["candump","can0"]) 

Я не знаю, как закончить. Есть идеи?

+0

[Соответствующий.] (http://stackoverflow.com/questions/13030162/manually-closing-subprocess-pipe) – Cairnarvon

+1

'Popen.terminate () 'и' Popen.kill() ' должен работать, если вы не хотите использовать 'send_signal'. [Документы] (http://docs.python.org/2/library/subprocess.html#subprocess.Popen.terminate) – msvalkon

ответ

2

Не используйте использовать команду вызова, если вы хотите контролировать подпроцесса

Если вы используете POPEN, как вы делали выше, вы должны присвоить его переменной, как это:

p = Popen(["candump","can0"],stdout=PIPE) 

После того как вы есть р, то вы можете использовать одну из следующих команд СИГНАЛ на нем http://docs.python.org/2/library/subprocess.html#subprocess.Popen.send_signal

1

Используйте Popen() и позвоните по номеру send_signal(signal.SIGINT) по возвращенному объекту Popen.

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