【问题标题】:Python Subprocess - mps-YoutubePython 子进程 - mps-Youtube
【发布时间】:2017-11-22 03:52:22
【问题描述】:

我目前正在做一个小型项目,该项目将接收语音命令,就像您在 Amazon echo 中使用 Raspberry Pi 上的 YouTube 一样。本质上,我调用歌曲或艺术家,脚本将运行第一个结果(现在)。

我用于将 Youtube 视频流式传输回音频的库是 mps-Youtube,我为它完成了 bash 自动化,如下所示:

(echo -e "$1"; echo -e "1") | mpsyt 

第一个参数是歌曲查询,第二个参数是选择第一个结果。

我遇到的问题是,到目前为止,我可以使用subprocess 模块在 Python 中运行它,到目前为止看起来像这样(在 python shell 中测试):

cmd = "/home/pi/bash/play_youtube_song.sh '为恐惧流泪'"
ps = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
输出 = ps.communicate()[0]
打印输出

然而,脚本只是打印了返回码0,而且程序似乎没有完全执行。

我能做些什么来确保 python 完全运行脚本吗? 我尝试在 bash 中使用 & 在后台运行它,但它似乎也不起作用,歌曲无法播放。

提前致谢。

【问题讨论】:

  • 尝试在 sh 中运行它,我得到了同样的结果,这可能取决于子进程如何使用 shell 命令
  • 谢谢!它打开 mpsyt 并运行该命令,但随后它似乎立即退出它。你是如何克服这个问题的?
  • 我认为有些歌曲无法播放的原因我想不通!

标签: python bash shell youtube subprocess


【解决方案1】:

解决了!

原来子进程默认使用/bin/sh,所以有一个参数可以让你把可执行文件改成/bin/bash。

我在 sh 中运行 bash 时发现了这一点,它并没有将所有参数回显到 mps-youtube 中,而在 gnome-terminal 中却实现了这一点。

信用:https://www.saltycrane.com/blog/2011/04/how-use-bash-shell-python-subprocess-instead-binsh/

【讨论】:

    猜你喜欢
    • 2014-09-19
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 2017-03-23
    相关资源
    最近更新 更多