【发布时间】:2018-09-01 16:14:40
【问题描述】:
我正在尝试使用 Python 中的子进程控制软件 MIDI 合成器 Timidity++。我这样做的方式是在其 Ncurses UI 中启动 Timidity++ 进程,然后将命令传递给子进程的 STDIN。这样我可以实时控制播放,例如调整键。
问题在于该方法似乎适用于 Python 2(特别是 Python 2.7.13),但不适用于 Python 3(特别是 Python 3.5.3)。这是什么原因?我正在 Raspbian 9 上对此进行测试。
我的代码如下:
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")
这似乎在 Python 2 上运行良好,即您可以听到播放、暂停和取消暂停以及按键调整。在 Python 3 上,它只是播放 MIDI 文件,直到程序终止。
【问题讨论】:
-
我怀疑字符串、字节和 unicode 之间存在差异,但无法放置。
-
我一开始就是这么怀疑的。但我使用的是
b"..."文字,它应该在 Python 2 和 3 中都给我字节。 -
刷新
a.stdin有帮助吗? -
确实如此!非常感谢:D
标签: python python-3.x subprocess