我有一个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的跨平台解决方案。
答案 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