Apo*_*dze 4 python cron pip python-venv pipenv
为了演示我遇到的问题,我将使用这个简单的函数,该函数位于/Users/X/Code/python/example/start.py:
def say_hello(name):
print("Saying hello to {}".format(name))
say_hello("John")
Run Code Online (Sandbox Code Playgroud)
我pipenv用来设置程序包和环境。在此文件夹(旁start.py),我还有其他四个文件- ,,Pipfile 和。Pipfile.lock.envlog.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....
Run Code Online (Sandbox Code Playgroud)
经过大量的搜索之后,我得出的结论是环境未设置正确的locales,因此我在该.env文件中添加了如下所示的文件:
LC_ALL=en_GB.UTF-8
LANG=en_GB.UTF-8
Run Code Online (Sandbox Code Playgroud)
然后,我花了几分钟,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
Run Code Online (Sandbox Code Playgroud)
因此,从技术上讲,现在应该将其cd放到该文件夹中,然后运行该文件pipenv,但我的文件中仍然出现相同的确切错误log。
任何帮助将非常感激。
小智 5
尝试添加/usr/local/bin到您的PATH。似乎pipenv可能需要在它所在的路径中调用其他应用程序。当cron运行作业时,它没有与登录Shell时所得到的环境相同的环境。
创建包装脚本以从cron调用可能更容易:
cd /Users/X/Code/python/example
PATH=/usr/local/bin:$PATH
pipenv run python start.py >> /Users/X/Code/python/example/log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2554 次 |
| 最近记录: |