私はraspberry-piを使用してプロジェクトに取り組んでおり、piのボタンを押してプログラムを起動し(squeezelite https://code.google.com/p/squeezelite/ )、ボタンが押されたときに検出したいと考えています。プログラムの起動時に取得された PID を使用して、プログラムを再度強制終了します。これには python subprocess モジュールが適していると思いますが、解決できない問題があります。
コード:
proc=subprocess.Popen(['squeezelite','-o','sysdefault:CARD=ALSA','-n','test','-m', '01:00:00:00:00:03','-z'])
2つのプロセスを起動するようです:
2886 pts/0 Z+ 0:00 [squeezelite] defunct
2887 ? SLsl 0:00 squeezelite -o sysdefault:CARD=ALSA -n test -m 01 00 00 00 00 03 -z
proc.pid は最初の PID を返します。
proc.communicate() を呼び出すと、最初のプロセスがクリーンアップされ、2 番目のプロセスだけが残ります。ただし、2番目のプロセスのPIDがわからないままです(proc.pidが最初のプロセスを提供するため、現在はなくなっています)。そのため、kill コマンドで PID を使用できません。
subprocess.Popen とさまざまなオプション (文字列引数、パラメーター引数、shell=True、shell=False など) のさまざまな組み合わせを試してみましたが、それぞれが同様の結果をもたらします。
これを機能させるのを手伝ってくれる人はいますか?または、プログラムを起動し、後でそれを終了するより良い方法はありますか?
ありがとう