从Python cron作业调用时的os.system()问题

时间:2015-12-22 08:35:35

标签: python macos path cron crontab

我使用Anaconda Python安装,我还有一个Python脚本,当使用python update_data.py从shell调用时,它可以正常工作。然后我用Python-Crontab package写了一篇简短的cron作业。然后我开始在Mac OS X El Capitan上遇到这些问题:

  1. os.system()返回256时,不应该
  2. Pandas, numpy这样的Python包无效。
  3. 这是我的cron脚本。

    import os
    from crontab import CronTab
    
    tab = CronTab()
    job_path = os.path.join(os.getcwd(), 'update_data.py')
    python_path = "/Users/BJay/anaconda/envs/python3/bin/python "
    
    cron_job = tab.new(command=python_path + job_path)
    cron_job.minute.every(2)
    tab.write()
    print(tab.render())
    

    我使用python_path的输出设置var which python。我没有提供有关update_data.py的信息,因为它可以从CLI正常工作。

    当我在cron环境中运行python3时,我得到以下信息:

    */2 * * * * /Users/BJay/anaconda/envs/python3/bin/python /Users/BJay/myGitHub/update_data.py
    

    这里是cron输出日志的摘录:

    Subject: Cron <random@email.here> /Users/BJay/anaconda/envs/python3/bin/python /Users/BJay/myGitHub/update_data.py 
    X-Cron-Env: <SHELL=/bin/sh>
    X-Cron-Env: <PATH=/usr/bin:/bin>
    X-Cron-Env: <LOGNAME=MrBee>
    X-Cron-Env: <USER=MrBee>
    X-Cron-Env: <HOME=/Users/BJay>
    
    ===================================
    0 of 0 repos updated successfully! 
    ===================================
    

    查看X-Cron-Env,可能是cron没有使用anaconda,而是使用默认的Python安装吗?

    我怎样才能解决这种情况?

    如果有帮助,请点击我的PYTHONPATH

    import os; print(os.getenv("PYTHONPATH")); 
    
    None
    

    ======这是我尝试运行的脚本的主要部分=====。

    for repo in list_of_local_repos:
        repo_path = os.path.join(parent_path, repo)
        git_sequence = "cd {0} && git add . && git commit -m 'updated' && git push origin master".format(repo_path)
        if os.system(git_sequence) == 0:
             repos_updated += 1
    
    repos_updated
    

    ipython notebook. Here's the notebook.中运行时,此脚本运行良好但是,使用python filename.py运行CLI时,os.system()此处始终返回256,因此repos_updated永远不会递增。

0 个答案:

没有答案