我在安装了omxplayer的ubuntu中用python创建了一个mp3播放器。
我使用tkinter框架来播放/暂停按钮。当python脚本运行时,它会显示一个播放按钮,一旦点击播放按钮,mp3将开始播放,按钮文本将变为暂停。然后,用户可以单击暂停按钮,mp3暂停,按钮文本也会更改。循环继续等。因为我使用omxplayer的键绑定,我使用子进程模块写入命令行。
我的代码是:https://codedump.io/share/8Sw4UfNIg4ZQ/1/mp3-player
重要的功能是musicPlay
:
def musicPlay():
global player, playing
if musicPlayButton["text"] == "Play": #If not paused
musicPlayButton["text"] = "Pause"
if playing == False: #If player isn't loaded
songString = library + "/" + libraryList[libraryIndex]
player = subprocess.Popen(["omxplayer","-o","local",songString],stdin=subprocess.PIPE)
playing = True
elif playing == True: #If player is loaded
player.communicate(input=(bytes('q',"UTF-8")))
elif musicPlayButton["text"] == "Pause":
musicPlayButton["text"] = "Play"
player.communicate(input=(bytes('q',"UTF-8")))
这是第一次正确启动mp3并暂停mp3。
阅读subprocess
模块上的文档,它指出communicate
方法关闭了stdin管道。因此,从堆栈溢出的其他问题来看,建议将communicate
替换为stdin.write
。
当我这样做时,mp3启动但不会暂停,似乎没有完成对stdin的写入。
我该如何克服这个问题?