ここで 2 番目の回答に似たようなことをしたい (ただし、まったく似ていない): Linux で作業中に Python で Ctrl-C キーボード割り込みをシミュレートする
それははるかに単純で、何かが欠けているだけだと思います。たとえば、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」の通常の出力も表示されるようにします。どうすればいいですか?
編集:実際にやりたいのは「ping」ではありません。連続出力を伴うコマンドの例として使用しているだけで、そのうち終了したいと思います。
より具体的には、古いバージョンの BitTorrent (ここの 3 番目の回答の v5.0.9: BitTorrent ソース コードはどこにありますか? ) を実行しており、Python スクリプトを介して呼び出しています。bittorrent-console.py は単純な端末バージョンであるため、「コンソール」です。定期的に複数行出力します。何かのようなもの:
saving: filename
file size: blah
percent done: 100.0
blah: blahblah
私は実際にそれを次のように呼んでいます:
subprocess.call(['./bittorrent-console.py', 'something.torrent'])
'percent done:' が 100.0 になったら自動的に終了させたいです。
編集: CentOS、Python 2.6 で実行しています。