Mac系统Cron任务默认调用Python2.7而非3.6的解决方法咨询
解决Mac上Cron默认使用Python2.7而非Python3的问题
我之前也踩过这个坑!Cron的执行环境和你平时打开Terminal的环境完全不同,~/.bash_profile里的配置根本不会被Cron加载,所以它默认只会调用系统自带的Python2.7。给你几个实用的解决办法:
方法1:直接使用Python3的绝对路径(最稳妥)
首先在Terminal里输入以下命令,找到你Python3的绝对路径:
which python3
你会得到类似/usr/local/bin/python3或者/usr/bin/python3的输出(取决于你的Python3安装方式,比如Homebrew安装的通常是前者)。
然后把Cron任务里的python替换成这个绝对路径。比如原来的Cron任务是:
* * * * * python /path/to/your/script.py
改成:
* * * * * /usr/local/bin/python3 /path/to/your/script.py
方法2:在Cron中加载环境变量
如果你的~/.bash_profile里已经配置了Python3的PATH,可以让Cron先加载这个配置文件再执行脚本。不过要注意Cron默认用sh而非bash,所以需要显式指定bash执行:
* * * * * /bin/bash -c "source ~/.bash_profile && python /path/to/your/script.py"
这个方法适合依赖多个环境变量的场景,但有时候会因为用户权限或环境差异出问题,不如方法1可靠。
方法3:给Python脚本添加Shebang行
在你的Python脚本第一行添加以下内容:
#!/usr/bin/env python3
然后给脚本添加执行权限:
chmod +x /path/to/your/script.py
之后在Cron任务里直接调用脚本路径即可:
* * * * * /path/to/your/script.py
这个方法适合需要频繁运行的脚本,不用每次都写Python路径。
额外提示
如果Cron执行还是有问题,可以把输出重定向到日志文件方便排查:
* * * * * /usr/local/bin/python3 /path/to/script.py >> /var/log/my_script_cron.log 2>&1
这样脚本的输出和错误信息都会被记录到日志里,方便你定位问题。
内容的提问来源于stack exchange,提问作者runningbirds
相关产品推荐
相关产品推荐

