所以这是一个超级奇怪的问题。我有一个 python 脚本,它根据某些条件通过 subprocess.call 调用许多 bash 命令。现在,脚本手动运行得很好,但是当放入 cronjob 时它会失败,但只有当它到达代码的特定部分时才会失败。这部分代码对用户运行一个bstat
和一个命令。bkill
我尝试过对这两个命令使用 subprocess.call、subprocess.Popen、subprocess.check_output ,每次到达它们时,它都会挂起并且不执行任何操作。然后我在 var/spool/mail/root 中收到此消息
File "/root/Desktop/script.py", line 75, in <module>
print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])
File "/usr/lib64/python2.7/subprocess.py", line 568, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我尝试过:对每个可能的命令使用绝对路径,在运行之前将目录更改为脚本的目录,在运行之前调用 /bin/python 。我完全不知所措。更奇怪的是,还有其他 subprocess.call 命令在调用 bash 脚本时工作得很好,但当涉及到这两个命令时,它不知道该怎么做。下面是它挂起的第一个子进程命令:
print subprocess.check_output(['bstat' '-q' 'viz' '-u' ,user,])
答案1
子进程调用正在寻找...中的bstat
或程序,除非 cron 环境中没有 $PATH`。指定这些程序的完整路径,即使是在 Python 脚本内,它也应该可以工作。bkill
$PATH