如何将交互式Python脚本作为cron作业运行?

时间:2017-01-26 17:39:17

标签: python linux macos cron

我有一个Python脚本,比如test.py,每次执行时都与用户交互。

test.py

#!/usr/bin/env python3

def foo():
    a = input()
    print("Hello, {}".format(a))

if __name__ == '__main__':
    foo()

我想每5分钟运行一次这个脚本。所以,我尝试将其添加到我的crontab,但似乎这不起作用,因为我没有被提示输入输入。
 我测试了我的crontab,它运行正常。

我应该使用schedule这样的库来完成这项任务吗? 在这种情况下,理想的出行方式是什么? 注意:我想要一个适用于MacOSX和GNU / Linux的跨平台解决方案。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用python模块pexpect(http://pexpect.sourceforge.net/doc/) - 用法类似于:

import pexpect
child = pexpect.spawn(script/python file etc...)
child.expect('Here goes the prompt you would expect')
child.sendline('What you want to send to it')

答案 1 :(得分:0)

不可能让cron在您的服务器上以交互方式进行交互。

Delink您的申请: 设置一个db(比如MySQL),每5分钟通过cron运行一次test.py来检查db中是否有新的条目:然后,有一个本地应用程序将用户提示信息保存到你的db。

答案 2 :(得分:0)

如果它通过cron或schedule运行,它将不会在您的终端上运行,它将作为后台进程运行。因此,它不能是交互式的,您将不会被提示。

如果你只是想延迟5分钟,你看看Linux" sleep"命令或使用python"" time.sleep"?通过这种方式,您可以保持终端打开,只需间隔运行作业。

为了简单起见:

#!/usr/bin/env python3
import time

def foo():
    a = input()
    print("Hello, {}".format(a))

if __name__ == '__main__':
    while True:
        foo()
        time.sleep(300) # Sleeps 300 seconds

答案 3 :(得分:0)

您可以在crontab中获取脚本并使用它:

#!/bin/bash
/usr/bin/python3 /home/user/project/test.py << EOF
some input here
EOF

您的crontab看起来像

* *  * * *   /home/user/project/test.sh >>  /home/user/project/LOG 2>&1