MySQLdb模块在从命令行运行Python脚本时有效,但不能作为cron作业

时间:2015-07-01 20:07:07

标签: python cron mysql-python

我正在尝试创建一个cron作业来运行我编写的python脚本,但由于某种原因,脚本只在我从命令行运行它时运行。它以前工作过,但我不小心删除了我的crontab。当我刚写的crontab试图运行它时,我得到一个关于MySQLdb模块是错误架构的错误:

    Traceback (most recent call last):
  File "/Users/myuser/Documents/EE_SFDC Integration/csv_reader/Weekly_Updates/Weekly_Confirmation/weekly_confirm.py", line 7, in <module>
    import MySQLdb
  File "/Library/Python/2.7/site-packages/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): no suitable image found.  Did find:
    /Library/Python/2.7/site-packages/_mysql.so: mach-o, but wrong architecture

在我的crontab中,我尝试使用几个python版本(2.7和3.4)的完整路径,但我仍然遇到了问题。当我使用3.4时,我没有收到有关MySQLdb的错误,但我在print .forma()语句中出错是出错的语法。

但是,当我从命令行运行脚本时,这种情况不会发生,因此我预计这也不是正确的版本。

cron工作看起来像这样:

14 12 * * * today=`date +"\%Y-\%m-\%d"` && /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2 /Users/myuser/Documents/EE_SFDC\ Integration/csv_reader/Weekly_Updates/Weekly_Confirmation/weekly_confirm.py > /Users/myuser/Documents/EE/run_logs/weekly_sync_runlog_$today.txt 2>&1

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

错误消息通常意味着您在MySQLdb(或依赖项)和Python体系结构之间存在不匹配。

也就是说,其中一个最有可能是64位,而另一个是32位。

如果您在终端中尝试以下操作会怎样?

$ /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python2
(Take note of the exact version)
>>> import platform
>>> print platform.architecture()
>>> import MySQLdb

再次这样做,但是这次是从您的路径中使用python并查看它们是否不同

$ python
>>> import platform
>>> print platform.architecture()
>>> import MySQLdb

编辑:

您还可以查看文件,构建模块的架构。

$ file /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so: Mach-O universal binary with 2 architectures
/Library/Python/2.7/site-packages/_mysql.so (for architecture x86_64):  Mach-O 64-bit bundle x86_64
/Library/Python/2.7/site-packages/_mysql.so (for architecture i386):    Mach-O bundle i386