如何从脚本在虚拟环境中运行程序

时间:2017-05-28 18:16:27

标签: bash shell raspberry-pi virtualenv google-assistant-sdk

我已在我的Raspberry Pi上设置了Google助手sdk,如下所示:https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/run-sample

现在为了重新运行助手我已经找到了两个命令

$ source env/bin/activate

(env) $ google-assistant-demo

但是我希望将此过程自动化为一个脚本,我可以从rc.local调用(后跟一个&),以便从启动时启动助手。

但是如果我运行一个简单的脚本

#!/bin/bash
source env/bin/activate
google-assistant-demo

助手不在环境中运行 我的环境路径是/home/pi/env/bin/activate 如何让脚本启动环境,然后在虚拟环境中运行助手

编辑:最后我采用了以下方法:

以此为基础: https://youtu.be/ohUszBxuQA4?t=774 - 感谢Eric Parisot

您需要download the src file他使用并将其内容提取到/home/pi/src/

但是有一些变化。

我没有将gassist.sh作为sudo运行,因为它给了我以下错误:

OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}

修复:请勿以sudo

运行

如果gassist.sh出现关于RPi.GPIO的错误,则需要执行https://youtu.be/ohUszBxuQA4?t=580

$ cd /home/pi/env/bin
$ source activate
(env) $ pip install RPi.GPIO
(env) $ deactivate

然后我做了sudo nano /etc/profile 并将其附加到最后:

#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi

现在它完美无缺,并且在虚拟环境中:)

4 个答案:

答案 0 :(得分:2)

在此处找到解决方案:https://raspberrypi.stackexchange.com/a/45089

在根目录中创建一个启动shell脚本(我将其命名为#34;启动"),使其也可执行:

sudo nano launch.sh
我是这样写的:

#!/bin/bash
source /home/pi/env/bin/activate
/home/pi/env/bin/google-assistant-demo

保存文件

编辑LXDE-pi自动启动文件

sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart

将其添加到该文件的底部

./launch.sh

重新启动

答案 1 :(得分:0)

我认为这篇文章可能会有所帮助:Why do people write #!/usr/bin/env python on the first line of a Python script? 基本上,哟会在脚本的顶部添加#!/ usr / bin / env python而不是#!/ bin / bash,你可以使用chmod 755使你的文件可执行。另外不要忘记保持& ;在电话结束时google-assistant-demo&和引用绝对文件名而不是https://www.raspberrypi.org/documentation/linux/usage/rc-local.md中所述的相对文件名

答案 2 :(得分:0)

rc.local执行的脚本在根目录中执行(或者可能在root用户的主目录中运行,具体取决于发行版,我认为?)

简单的解决方法是编写环境的完整路径。

#!/bin/bash
source /home/pi/env/bin/activate
google-assistant-demo
# or maybe /home/pi/google-assistant-demo

无需在rc.local

中明确显示背景内容

答案 3 :(得分:0)

最后我采用了以下方法:

以此为基础:https://youtu.be/ohUszBxuQA4?t=774 - 感谢Eric Parisot

但是有一些变化。

您需要download the src file他使用并将其内容提取到/home/pi/src/

我没有将gassist.sh作为sudo运行,因为它给了我以下错误:

OpenAlsaHandle PcmOpen: No such file or directory
[7689:7702:ERROR:audio_input_processor.cc(756)] Input error
ON_MUTED_CHANGED:
{‘is_muted’: False}
ON_START_FINISHED
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}
[7689:7704:ERROR:audio_input_processor.cc(756)] Input error
ON_ASSISTANT_ERROR:
{‘is_fatal’: True}

修复:不要以sudo身份运行

如果gassist.sh出现关于RPi.GPIO的错误,则需要执行https://youtu.be/ohUszBxuQA4?t=580

$ cd /home/pi/env/bin
$ source activate
(env) $ pip install RPi.GPIO
(env) $ deactivate

然后我做了sudo nano /etc/profile并将其附加到最后:

#Harvs was here on 24/06/17
if pidof -x "gassist.sh" >/dev/null; then
    echo ""
    echo "/etc/profile says:"
    echo "An instance of Google Assistant is already running, will not start again"
    echo ""
else
    echo "Starting Google Assistant..."
    echo "If you are seeing this, perhaps you have SSH within seconds of reboot"
    /home/pi/src/gassist.sh &
fi

现在它完美运行,在虚拟环境中,并在启动到CLI模式! :)