【问题标题】:How to run the sequence of python scripts one after another in a loop?如何在循环中一个接一个地运行python脚本序列?
【发布时间】:2018-06-20 14:19:19
【问题描述】:

如何依次运行 20 到 30 个脚本,并在最后一个脚本执行后 - 再次运行第一个脚本并每小时运行一次迭代?

我尝试使用 crontab 来实现它,但它是一种笨重的方式。我想保证每一刻只有一个脚本在运行。每个脚本的执行时间约为 1 分钟。

我为此目标编写了一个 bash 脚本,并考虑使用 cron 每小时运行一次:

if ps ax | grep $0 | grep -v $$ | grep bash | grep -v grep
then
    echo "The script is already running."
    exit 1
else
    python script1.py
    python script2.py
    python script3.py
    ...
    python script30.py
fi

但这是一个好方法吗?

【问题讨论】:

    标签: python bash cron


    【解决方案1】:

    从这个问题,我假设您只想在旧程序完成后运行下一个程序。

    我建议subprocess.call,它只会在被调用的程序执行完毕后才返回到函数的调用。

    这是一个例子。当 script1 完成时,它将运行 script1,然后是 script2。

    import subprocess
    
    program_list = ['script1.py', 'script2.py']
    
    for program in program_list:
        subprocess.call(['python', 'program'])
        print("Finished:" + program)
    

    【讨论】:

      【解决方案2】:

      更正@twaxter:

      import subprocess
      
      program_list = ['script1.py', 'script2.py']
      
      for program in program_list:
          subprocess.call(['python', program])
          print("Finished:" + program)
      

      【讨论】:

      • 指出原始解决方案在子进程调用中错误地称为“程序”可能会有所帮助,这将导致传递一个字符串,而不是列表项的值。
      【解决方案3】:

      您可以使用 for 循环:

      scripts = "script1.py script2.py script3.py"
      for s in $scripts
      do
          python $s
      done
      

      【讨论】:

        【解决方案4】:

        您也可以使用exec 命令:

        program_list = ["script1.py", "script2.py"]
        
        for program in program_list:
            exec(open(program).read())
            print("\nFinished: " + program)
        

        【讨论】:

          【解决方案5】:

          如果您的文件与 glob 模式匹配

          files=( python*.py )
          for f in "${files[@]}"
          do
              python "$f"
          done
          

          【讨论】:

            猜你喜欢
            • 2018-08-12
            • 2021-05-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-14
            • 2020-11-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多