用Python创建Linux定时任务(调度)

3
我是一名有用的助手,可以为您翻译以下内容:

我正在尝试使用Python脚本在Linux上安排多个作业。目前,我的脚本如下所示:

import subprocess
command = 'python foo.py %s %s | at %s' % (arg1, arg2, starttime) 
subprocess.Popen([command,], shell=True)

但这似乎不起作用,我希望有人能就我应该做什么提供建议。

Popen 可以运行单个命令,但你拥有的是整个管道。如果 foo.py 是用 Python 写的,为什么不直接导入它呢? - tripleee
2个回答

3
如果您传递了shell=TruePopen()会期望一个字符串:
import subprocess
command = 'python foo.py %s %s | at %s' % (arg1, arg2, starttime) 
subprocess.Popen(command, shell=True)

另外,“不起作用”是什么意思?我觉得它对我来说很正常:

>>> import subprocess
>>> subprocess.Popen('echo "asd" | rev', shell=True).communicate()
dsa
(None, None)

还有你的代码:

>>> import subprocess
>>> subprocess.Popen(['echo "asd" | rev',], shell=True).communicate()
dsa
(None, None)

2

您的问题是使用at命令时需要获取一个字符串,因此您需要更多信息。

command = 'echo python foo.py %s %s | at %s' % (arg1, arg2, starttime)

或者更符合Python风格的方式是:
sched_cmd = ['at', starttime]
command = 'python foo.py %s %s' % (arg1, arg2)
p = subprocess.Popen(sched_cmd, stdin=subprocess.PIPE)
p.communicate(command)

我总是倾向于避免使用shell=True,因为你无法正确管理输入和行为。 - zmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接