我有一个shell脚本,包括执行python脚本。当我在终端中手动运行它时,它工作正常。但是,当我在cron作业中执行shell脚本时,python脚本失败。
当函数从module1导入module2时,显然会触发错误。错误引用的函数不在被导入的函数中,也不是语法错误在其自身执行时引发错误的函数。
这是我运行cron作业时记录的错误:
File "/Users/me/module2.py", line 5, in <module>
from module1 import consolidate_rankings, build_all
File "/Users/me/module1.py", line 159
things = {row["thing"]: row for row in rows}
^
SyntaxError: invalid syntax
module2脚本非常简单:
#!/usr/bin/env python
from module1 import consolidate_rankings, build_all
consolidate_rankings()
build_all()
以下是在shell脚本中调用它的行:
python /Users/me/module2.py
任何人都知道这里发生了什么?
答案 0 :(得分:6)
您可能正在使用不同版本的Python从cron运行脚本,该版本不支持字典理解语法。
要解决此问题,请在shebang行中明确添加所需的Python版本:
#!/usr/bin/env python2.7
或通过正确的命令从cron启动脚本:
* * * * /usr/bin/python2.7 /path/to/script.py
答案 1 :(得分:0)
我通过在 crontab 本身中声明我的本地环境来解决这个问题(因为以上没有帮助):
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/usr/local/sifi/bin:/home/username/.local/bin:/home/username/bin:/home/username