0

指定したWebサイトでオーディオブックのチャプターを検索し、ダウンロードして再生する小さなオーディオプレーヤーを作成しました。唯一の問題は、一時停止できないことです。私が使用しているmp3ファイルを再生するにはos.system("afplay chapter.mp3")

呼び出しを含むスレッドを作成することを考えましたos.systemが、そのように一時停止することはできないと確信しています。スレッドがループの場合、再開する準備ができたら、アクセスしてロックを解除する必要がある変数をロックするだけで済みます。しかし、このスレッドは1行のコードにすぎないため、不可能と思われます。また、プロセスを作成して送信SIGSTOPすることも検討しました。しかし、いくつかの未知の理由でそれは機能しません。

import os, signal
from multiprocessing import Process

p = Process(target=play)
p.start()
raw_input("press enter to pause: ")
os.kill(p.pid, signal.SIGSTOP)

コードは、プロセスを停止せずにサイレントに実行されます。

afplayに代わるものがあることは知っていますが、今のところはos.system呼び出しに固執するつもりです。だから私の質問は、どうすれば1行のスレッドまたはプロセスを一時停止できますか?Process()呼び出しで新しいプロセスを作成する代わりに、afplayのプロセスIDを見つける必要がありますか?もしそうなら、どのように?

4

2 に答える 2

1

os.system子プロセスを作成し、その子プロセスが終了するのを待ちます。os.execvプロセスを別のプログラムに置き換えるために使用し subprocess.Popenたり、のpidを見つけることができる子プロセスを作成するために使用したりできますPopen.pid

于 2012-07-17T13:31:41.447 に答える
0

サブプロセスとos.systemの代わりにサブプロセスモジュールを使用してみませんか?これにより、生成されたプロセスをより適切に制御できるようになります。

于 2012-07-17T13:38:19.050 に答える