Python 如何使用`crontab`或`gnome terminal`从虚拟环境执行命令`

Python 如何使用`crontab`或`gnome terminal`从虚拟环境执行命令`,python,virtualenv,crontab,gnome-terminal,virtualenvwrapper,Python,Virtualenv,Crontab,Gnome Terminal,Virtualenvwrapper,当我想使用virtualenv(1.8.2)和VirtualEnvrapper(3.6)在虚拟环境中工作时,我只需在我的\u项目中运行work。但是,我无法使用crontab或gnome终端从虚拟环境执行命令: 示例: ***在my_项目和&python task.py上工作 这还没有执行。(任务写入文件) 或 gnome终端--tab-e“bash-c\”在myu项目中工作;python task.py;exec bash\“” 这只是显示未找到的bash:workon:command,然后从

当我想使用virtualenv(1.8.2)和VirtualEnvrapper(3.6)在虚拟环境中工作时,我只需在我的\u项目中运行
work
。但是,我无法使用
crontab
gnome终端
从虚拟环境执行命令:

示例:

***在my_项目和&python task.py上工作

这还没有执行。(任务写入文件)

gnome终端--tab-e“bash-c\”在myu项目中工作;python task.py;exec bash\“”
这只是显示未找到的bash:workon:command,然后从系统环境执行程序。查看有关此命令的详细信息

编辑 @扎尔·海:要在我的
/home/myusername/.bashrc
中启动
虚拟说唱歌手

export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
所以我尝试了这个命令:

gnome-terminal --tab -e "bash -c \"export WORKON_HOME=~/.virtualenvs;source /usr/local/bin/virtualenvwrapper.sh;export PIP_VIRTUALENV_BASE=$WORKON_HOME;export PIP_RESPECT_VIRTUALENV=true;source /home/myusername/.virtualenvs/my_project/bin/activate;exec bash\""
但我仍然得到了与我在您的评论中发布的相同的输出。

通过crontab:

0 10 * * * env -i bash -c 'export WORKON_HOME=~/.virtualenvs && source /usr/local/bin/virtualenvwrapper.sh && workon my_project && python task.py'
通过gnome终端:

gnome-terminal --tab -e 'bash -c "export WORKON_HOME=~/.virtualenvs && source /usr/local/bin/virtualenvwrapper.sh && workon my_project && python task.py " '
最好是创建一个runme.sh脚本:

#/bin/sh
set -e
export WORKON_HOME=~/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
workon my_project
exec python task.py

然后通过gnome终端/crontab运行这个脚本。

我认为这个问题适合
stackoverflow
superuser
这两种情况。(程序员常用的软件工具)忘记
工作
激活
。使用virtualenv的python的绝对python路径,可以更轻松、更安全地完成任务。例如:
/home/myusername/.virtualenvs/myproject/bin/python task.py
当您只安装了
virtualenv
时,这可能会起作用。但我也使用VirtualEnvrapper,所以我得到的是:
回溯(最近一次调用):文件“”,第1行,在ImportError中:没有名为VirtualEnvrapper.hook\u loader VirtualEnvrapper.sh的模块:运行初始化挂钩时出现问题。如果Python无法导入模块virtualenvwrapper.hook\u loader,请检查virtualenv是否已为virtualenvwrapper\u Python=/home/myusername/.virtualenvs/my\u project/bin/Python安装,并且该路径设置正确。
Btw,查看我的原始帖子的编辑以了解更多信息。我还使用了
virtualnvwrapper
activate
就足够了。您的
virtualenv
有任何自定义挂钩吗。让我们将命令简化为:
env-ibash-c'export WORKON\u HOME=~/.virtualenvs&&source/usr/local/bin/virtualenvwrapper.sh&&source/HOME/myusername/.virtualenvs/my\u project/bin/activate&&python…'“
问题在于在双引号中使用$VAR-它由执行整个命令的shell计算,而不是由内部bash计算。您需要使用单引号来防止启动shell时对字符串中的变量求值。我已经用最新的“what works”更新了答案。也不需要同时寻找激活脚本和运行
workon…
。他们主要是做拯救的事情。