我认为运行带有稍微修改环境的外部命令是一种非常常见的情况.这就是我倾向于这样做的方式:
import subprocess, os
my_env = os.environ
my_env["PATH"] = "/usr/sbin:/sbin:" + my_env["PATH"]
subprocess.Popen(my_command, env=my_env)
Run Code Online (Sandbox Code Playgroud)
我有一种直觉,觉得有更好的方法; 看起来好吗?
我每小时都有一个crontab..bash_profile
当用户从终端运行作业时,运行它的用户在该工作中具有环境变量,但是,显然这些在运行时不被crontab拾取.
我试着在设置它们.profile
和.bashrc
,但他们似乎仍然没有得到回升.有谁知道我可以把crontab可以拿到的环境变量放在哪里?
我想
import sys
sys.path.append("/home/me/mydir")
Run Code Online (Sandbox Code Playgroud)
将一个dir附加到我的pythonpath
如果我打印sys.path我的目录在那里.
然后我打开一个新命令,它就不存在了.
但不知何故,Python无法导入我保存在该目录中的模块.
我究竟做错了什么?
我读过.profile或.bash_profile就可以了.
我必须添加:
PATH="/Me//Documents/mydir:$PYTHONPATH"
export PATH
Run Code Online (Sandbox Code Playgroud)
为了使它工作?
我正在尝试从cron运行python脚本,但它没有正常运行,所以我假设它的路径env变量不同.反正有没有在python脚本中更改变量?
我创建了一个Python脚本,我想通过Ubuntu服务器上的cronjob每天运行.
这是从命令行运行此脚本的方式:
python /home/username/public_html/IDM_app/manage.py cleanUpPosts
Run Code Online (Sandbox Code Playgroud)
从CLI调用时,脚本运行正常.
但是,当我尝试通过cronjob运行脚本时,脚本无法正常运行.日志文件显示正在请求脚本,但它们未显示脚本未正确执行的原因.
我在脚本中添加了Python日志记录.从CLI调用脚本时,日志记录正确进行.从cron调用时,python日志记录无法写入其日志文件.
我怀疑问题是cronjob在请求脚本时没有运行shell.
我似乎无法找到cron守护进程记录错误的任何地方.
我创建了/var/log/cron.log
然而这似乎没有更新.
由于我认为问题源于ENV变量,我试图让cronjob为自己显示ENV.
这是我的crontab的样子:
$ crontab -u username -e
m h dom mon dow command
43 17 * * * /bin/sh python /home/username/public_html/IDM_app/manage.py cleanUpPosts
43 17 * * * python /home/username/public_html/IDM_app/manage.py cleanUpPosts
45 21 * * * echo "-----------------"; echo "import os; print os.environ" | python
47 21 * * * /bin/sh echo "------with shell-------"; echo "import os; printos.environ" | python
MAILTO=bryanw@nowhere.com
Run Code Online (Sandbox Code Playgroud)
我以为它会输出到屏幕,但它没有.ENV变量在哪里输出?
无论如何,这里是日志文件:
# tail -n 5 /var/log/*.log
==> …
Run Code Online (Sandbox Code Playgroud)