子进程调用以设置crontab

时间:2015-05-16 21:59:09

标签: python cron raspberry-pi subprocess

我正在尝试在python中使用子进程调用来添加cron作业条目:

from subprocess import call

call(["(crontab -l; echo '* * * * * ls -l | tee tresults.txt') | sort - | uniq - | crontab - "])

我不知道我做错了什么!这是错误:

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你在这里遇到问题的原因是来自call的{​​{1}}函数有两种方法被调用(引用Python 2.7文档:https://docs.python.org/2/library/subprocess.html#frequently-used-arguments):< / p>

  1. 如果您使用subprocess并将单个字符串作为参数,则还需要传递'shell = True':

    call
  2. 如果您不想调用call("a long command with many arguments", shell=True) ,这在某些情况下可能会很糟糕,您需要将每个参数附加到它自己的字符串中,如Python文档示例中所示:{{3 }}

    shell=True
  3. 在您的情况下,我会尝试在call(["ls", "-l"]) 来电中添加shell=True参数,看看是否有帮助。

答案 1 :(得分:0)

subprocess.call()默认情况下不会运行shell(/bin/sh)。

您需要emulate multiple pipes in Python或只需传递shell=True

#!/usr/bin/env python
from subprocess import check_call

check_call("(crontab -l; echo '* * * * * ls -l | tee tresults.txt') | "
           "sort - | uniq - | crontab - ",
           shell=True)