簡體   English   中英

在crontab中使用Python subprocess.call嗎?

[英]Using Python subprocess.call with crontab?

關於在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)

答案是crontab中的PATH變量必須使用絕對路徑,如下所示:

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

這樣就解決了所有問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM