python子进程模块,使用communic()而不是process.stdin.write()

时间:2017-01-09 03:39:03

标签: python subprocess stdin

我在安装了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的写入。

我该如何克服这个问题?

0 个答案:

没有答案