Поймать вывод терминала в Python
Я хочу сделать что-то похожее на второй ответ здесь (но не совсем похоже):Имитация прерывания клавиатуры Ctrl-C в Python при работе в Linux
Это намного проще, и я думаю, что я что-то упустил. Скажем, из сценария Python я просто хочу вызвать ping и завершить его после 10-го раза. Я пытаюсь сделать это как по ссылке выше:
p = subprocess.Popen(['ping', 'google.com'], stdout=subprocess.PIPE)
for line in p.stdout:
print line
if re.search('10', line):
break
os.kill(p.pid, signal.SIGINT)
Но это не работает.
И я также хочу, чтобы обычный вывод команды ping отображался. Как мне это сделать?
РЕДАКТИРОВАТЬ: Это на самом деле не «пинг», что я хочу сделать. Я просто использую это как пример команды с непрерывным выводом, которую со временем я хотел бы прекратить.
Более конкретно, я использую старую версию BitTorrent (v5.0.9 из 3-го ответа здесь:Где найти исходный код BitTorrent?) и я звоню через скрипт на python. Bittorrent-console.py - это простая терминальная версия, следовательно, 'console'. Периодически выводит несколько строк. Что-то вроде:
saving: filename
file size: blah
percent done: 100.0
blah: blahblah
Я на самом деле называю это:
subprocess.call(['./bittorrent-console.py', 'something.torrent'])
Я хочу прекратить это автоматически, когда я вижу, что это 100.0 в 'процентах выполнено:'.
РЕДАКТИРОВАТЬ: я работаю на CentOS, Python 2.6.