如何每隔n分钟从烧瓶执行shell脚本?

时间:2017-03-15 11:26:54

标签: python bash flask

我的工作目录中有一个简单的bash脚本switch.sh,我需要在我的烧瓶应用中每n分钟运行一次。

from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger
from subprocess import call

def run_aws_script():
    call(". ./switch-role.sh", shell=True)

if __name__ == '__main__':
    run_aws_script()

    scheduler = BackgroundScheduler()
    scheduler.start()
    scheduler.add_job(func=run_aws_script,
        trigger=IntervalTrigger(minutes=25),
        id='Switching role',
        name='Switch role every 25 minutes',
        replace_existing=True)

    app.run()

如果我从我的工作目录开始我的程序,aws-switch-role的位置如下:python app.py一切正常。

但是,如果我从python server/app.py这样的另一个目录运行它 /bin/sh: ./switch-role.sh: No such file or directory

我该如何解决?

我想在我的应用开始之前运行该脚本。 如何删除第一个电话run_aws_script()并将其移至scheduler

1 个答案:

答案 0 :(得分:0)

如果您仔细阅读python文档,那么您可以找到使用" shell = True"的信息。不安全。您可以使用subprocess.check_output命令,而不是调用。

cwd = <path_to_switch_role.sh>
subprocess.check_output([cwd],stderr=subprocess.STDOUT)

在这种情况下,没有mater从哪个目录运行那些python。 关于每n分钟运行一次,你可以使用python sleep命令。