我试图用Python中的子进程来控制软件MIDI合成器Timidity++。我的方法是在Ncurses UI中启动Timidity++进程,然后将命令传递给子进程的STDIN。这样,我可以控制播放,例如调整关键点,在实时
问题是,这种方法似乎适用于Python2(特别是Python2.7.13),但不适用于Python3(特别是Python3.5.3)。原因是什么?我在Raspbian9上测试这个
我的代码如下:
from subprocess import *
import time
a = Popen(["timidity", "-in", "MIDI_sample.mid"], stdin=PIPE, stdout=PIPE)
time.sleep(4)
a.stdin.write(b"+")
time.sleep(4)
a.stdin.write(b"s")
time.sleep(4)
a.stdin.write(b"s")
time.sleep(4)
a.stdin.write(b"q")
这在Python2上似乎工作得很好,即您可以听到播放、暂停和取消暂停以及按键调整。在python3上,它只是通过MIDI文件播放,直到程序终止
正如Davis在上面的评论中指出的,flushing
a.stdin
解决了这个问题。因此,以下代码适用于Python2和Python3:相关问题 更多 >
编程相关推荐