ここで数週間前にこれに関連する質問をしました: Python、mpg123、およびサブプロセスがstdin.writeまたはcommunicationを適切に使用していません
そこからの助けのおかげで、私はその時に必要なことをすることができました. (q は呼び出しませんでしたが、それを停止するためにサブプロセスを終了しました)。
from subprocess import Popen, PIPE, STDOUT
p = Popen(["mpg123", "-C", "test.mp3"], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
#wait a few seconds to enter this, "q" without a newline is how the controls for the player work to quit out if it were ran like "mpg123 -C test.mp3" on the command line
p.communicate(input='q')[0]
以前と同じように、mpg123 の標準的なコントロールと同じように mpg123 を終了するには、これが必要です (「q」を押して終了するか、「-」を押して音量を下げるか、「+」を押して音量を上げるなど)。 )、今私は上記のコードを使用しています。これは理論的には機能するはずであり、同様のプログラムで機能します。サブプロセスを使用して、mpg123 に組み込まれているコントロール (「mpg123 -C what.mp3」を使用してアクセスできるコントロール) を使用する方法を知っている人はいますか? コントロールが必要になるので、terminate ではもう十分ではありません ^_^
編集: abarnert にすばらしい回答をありがとう =) わかりました。したがって、新しいコードは単に abarnert の回答をわずかに変更したバージョンですが、mpg123 はコマンドを受け入れていないようです。
import os
import pty
import sys
import time
pid, fd = os.forkpty()
if pid:
time.sleep(5)
os.write(fd, 'b') #this should've restarted the file
time.sleep(5)
os.write(fd, 'q') #unfortunately doesn't quit here =(
time.sleep(5) # quits after this is finished executing
else:
os.spawnl(os.P_WAIT, '/usr/bin/mpg123', '-C', 'TEST file.mp3')