[英]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.