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

How to run a programme inside a virtual environment from a script

我已经在我的 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

现在它在虚拟环境中完美运行:)

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

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

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

rc.local

中无需显式设置任何背景

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

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

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

重启

最后我采用了以下方法:

以此为基础: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 模式! :)