为了演示我遇到的问题,我将使用这个简单的函数,它位于/Users/X/Code/python/example/start.py
:
def say_hello(name):
print("Saying hello to {}".format(name))
say_hello("John")
我pipenv
用来设置我的包和环境。在这个文件夹中(旁边start.py
),我还有四个其他文件- Pipfile
、Pipfile.lock
和..env
log.txt
当我运行时pipenv run python start.py
,一切正常,我得到一个输出。
现在我希望这个脚本每分钟运行一次,所以我设置了一个 cron 作业crontab -e
,这是我最初在那里的:
* * * * * /usr/local/bin/pipenv run python /Users/X/Code/python/example/start.py >> /Users/X/Code/python/example/log.txt 2>&1
这给了我该文件中的错误转储log.txt
:
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult http://click.pocoo.org/python3/for mitigation steps.
This system lists a couple of UTF-8 supporting locales that
you can pick from. The following suitable locales where
discovered: af_ZA.UTF-8, am_ET.UTF-8, be_BY.UTF-8, bg_BG.UTF-8, ca_ES.UTF-8, cs_CZ.UTF-8, da_DK.UTF-8, de_AT.UTF-8, de_CH.UTF-8, de_DE.UTF-8, el_GR.UTF-8, en_AU.UTF-8....
经过大量的谷歌搜索,我得出的结论是环境设置不正确locales
,所以我在该.env
文件中添加了如下所示:
LC_ALL=en_GB.UTF-8
LANG=en_GB.UTF-8
然后我又花了几分钟查看log.txt
一遍又一遍地出现相同的错误,然后我意识到当我调用时/usr/local/bin/pipenv
,它实际上需要正确Pipfile
的加载正确的环境。所以相反,我把我cron
的改为:
* * * * * cd /Users/X/Code/python/example && /usr/local/bin/pipenv run python /Users/X/Code/python/example/start.py >> /Users/X/Code/python/example/log.txt 2>&1
所以从技术上讲,现在它应该cd
进入文件夹然后运行这些pipenv
东西,但我的文件中仍然出现同样的错误log
。
任何帮助将非常感激。