子進程控制的交互我問與此相關的幾個星期前就在這裏一個問題: Python, mpg123 and subprocess not properly using stdin.write or communicate蟒蛇2.7 - 與mpg123的
多虧從那裏我能夠做什麼,我需要的時候提供幫助。 (沒有打電話給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的像這將是與它的標準控件(如按「Q」退出,或「 - 」把音量調低,「+ '將音量調高等等),現在我使用上面的代碼,這在理論上應該可以工作,並且它可以用類似的程序工作。有誰知道一種方法,我可以使用內置於mpg123中的控件(可通過使用「mpg123 -C whatever.mp3」訪問的控件)使用子過程?終止是不夠的,因爲我將需要控制^ _^
編輯:非常感謝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')
是否有理由想要控制'mpg123'播放器,而不是使用Python庫(或者甚至綁定'libmpg123')來播放音樂並執行自己的控制? – abarnert
主要是因爲我是一個新手哈哈,我看到的與Raspberry Pi(我的特定平臺)播放的大部分東西都使用mpg123或mpg321,當我說我希望能夠播放mp3通過python使用一個子進程與其中一個球員 – codingNewb
首先,對不起我的過度縮寫;它似乎導致你誤入歧途。每當我處理POSIX風格的代碼時,我都會回覆使用像'pid'和'fd'這樣的單詞,好像每個人都應該理解它們的意思。 'pid'是一個進程ID,而不是父ID,在這種情況下,它是_child_進程ID,因此調用它'parentID'會令人困惑。而'fd'是一個文件描述符(或者,對於真正的老年人文件描述符索引),而不是文件目錄。 – abarnert