【问题标题】:Using Python subprocess.call with crontab?将 Python subprocess.call 与 crontab 一起使用?
【发布时间】:2015-08-26 06:42:30
【问题描述】:

关于在 crontab 中运行的 python 脚本中使用 subprocess.call,我遇到了困难。我已将此问题隔离为子进程无法找到 7z 可执行文件。我在 FreeBSD 10.1 上运行它,但这应该没什么区别。我尝试将 PYTHONPATH=$PATH 添加到 crontab,尝试将 shell=True 添加到 subprocess.call,并且尝试使用 /usr/loca/bin/7z 而不是 7z。这些都没有解决问题。我得到的错误如下:

/usr/local/bin/7z: realpath: not found
/usr/local/bin/7z: dirname: not found
exec: /../libexec/p7zip/7z: not found

这是我在 crontab 中调用脚本的方式:

PATH=$PATH:/usr/local/bin
@every_minute           $HOME/test.py >> $HOME/test.error 2>&1

这是我的脚本(test.py)的内容:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import subprocess
import tempfile

thing = 'blahblahblah'

errors = open('/home/myuser/error', 'wb')

with tempfile.TemporaryDirectory() as tmpdirname:
    tempthing = os.path.join(tmpdirname, thing)
    fh = open(tempthing, 'wb')
    fh.write(b'123')
    fh.close()
    zipname = '{}.zip'.format(thing)
    ziptempfile = os.path.join(tmpdirname, zipname)
    zipper = subprocess.call(['7z', 'a', '-p{}'.format('something'), '-tzip', '-y', ziptempfile, tempthing], stdout=errors, stderr=subprocess.STDOUT)

【问题讨论】:

  • 是 7z 是 /usr/local/bin?
  • 是:$ whereis 7z 7z: /usr/local/bin/7z
  • 你的文件也可以执行吗?
  • -rwxr-xr-x 1 myuser myuser 439 Jun 10 21:19 test.py
  • -r-xr-xr-x 1根轮112 Jun 4 18:38 /usr/local/bin/7z

标签: python


【解决方案1】:

答案是crontab中的PATH变量必须使用绝对路径,像这样:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

这解决了一切。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    相关资源
    最近更新 更多