我在工作dir中有一个简单的bash脚本 switch.sh
,我需要在烧瓶应用中每分钟运行每分钟。
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()
如果我从工作dir启动程序,则 aws-switch-role
位于以下位置: python app.py
一切正常。
但是,如果我从另一个dir(例如python server/app.py
)运行它,我有 /bin/sh: ./switch-role.sh: No such file or directory
我该如何解决?
我想在我的应用程序启动之前运行该脚本。如何删除第一个调用run_aws_script()
并将其移至scheduler
?
如果您仔细阅读了Python文档,则可以找到使用" shell = true"的信息。您可以使用subprocess.check_output命令,而不是呼叫。
cwd = <path_to_switch_role.sh>
subprocess.check_output([cwd],stderr=subprocess.STDOUT)
在这种情况下,您没有从哪个目录中运行这些python。大约每n分钟运行一次,您可以使用python睡眠命令。