【问题标题】:how to run Python subprocess pipe in the background and then kill it如何在后台运行Python子进程管道然后将其杀死
【发布时间】:2015-11-20 04:34:08
【问题描述】:

我想让语音合成程序 Festival 生成声音,直到它被杀死。在 Bash 中,我想要做的事情如下:

>cat /var/log/dmesg | festival --tts &
[1] 27262
>kill -9 27262

当我尝试使用subprocess 执行此操作时,我的代码在使用通信功能时挂起。我该如何解决这个问题?该进程应立即终止。

raw_input(
    "Ready to set Festival running...\n" +\
    "Press Enter to continue."
)
process_cat = subprocess.Popen([
    "cat",
    "/var/log/dmesg"
], stdout = subprocess.PIPE)
process_Festival = subprocess.Popen([
    "festival",
    "--tts"
], stdin = process_cat.stdout, stdout = subprocess.PIPE)
process_Festival.communicate()[0]
raw_input(
    "Ready to stop Festival running...\n" +\
    "Press Enter to continue."
)
os.kill(process_cat.pid, signal.SIGKILL)
os.kill(process_Festival.pid, signal.SIGKILL)

【问题讨论】:

  • 所以你认为:os.kill() 等于 Terminal> kill -9?调用终端杀死并读取输出。

标签: python pipe subprocess kill communicate


【解决方案1】:

process_Festival.communicate() 是一个阻塞调用。您应该删除它,而是在 raw_input 之后使用 process_Festival.kill() 终止进程。

【讨论】:

  • 啊,就是这样。感谢您对此的帮助。我已经等了很久了......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多