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

2024-04-19 13:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

测试.py

#!/usr/bin/env python3

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

if __name__ == '__main__':
    foo()

我想每5分钟运行一次这个脚本。因此,我尝试将其添加到我的crontab中,但似乎这不起作用,因为没有提示我输入一个输入。
我已经测试了我的crontab,它工作得很好。在

我是否应该为此任务使用schedule之类的库?
在这种情况下,最理想的方式是什么?
注意:我想要一个跨平台的解决方案,可以在MacOSX和GNU/Linux上运行。在


Tags: 用户pytestenv脚本formathelloinput
3条回答

您可以尝试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')

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

如果你只想延迟5分钟,你看过Linux的“sleep”命令还是使用python的时间。睡觉"? 通过这种方式,您可以保持终端的打开状态,并且只需每隔一段时间运行作业。在

为了简单起见:

#!/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

在您的服务器上不可能让cron交互。在

断开应用程序的链接: 建立一个数据库(比如MySQL),有测试.py每隔5分钟通过cron运行一次,检查数据库中是否有新的条目:然后,有一个本地应用程序将用户提示信息保存到数据库中。在

相关问题 更多 >