【问题标题】:Running shell scripts under one process in Python [duplicate]在Python中的一个进程下运行shell脚本[重复]
【发布时间】:2016-06-12 11:24:50
【问题描述】:

我对 shell 脚本很陌生。 我必须使用 Python 执行 shell 脚本。 shell 脚本的顺序很重要。 这是我的示例 Python 代码

import subprocess
import os

script1=  "scripts/script1.sh"
script2 = "scripts/script2.sh"
script3 = "scripts/script3.sh"

subprocess.call([script1])
subprocess.call([script2])
subprocess.call([script3])

问题在于上面的代码所有脚本都一个接一个地单独执行,但我想在一个进程下运行所有​​脚本。

例如,script2 和 script3 应该在脚本 1 运行时执行。

【问题讨论】:

  • “在一个进程下”如何表示“在另一个脚本运行时执行”?这些似乎完全矛盾。如果您想同时运行它们,如何保持顺序?
  • @Daniel Roseman 是的,“在一个进程下”我的意思是“script2 和 script3 在 script1 运行时运行”。实际上,在我的实现中,script1 打开了一个调试程序的 GUI,该程序正在等待 script2 执行的一些命令。
  • 你应该澄清你的问题。 shell 脚本始终是一个单独的进程。您可以运行多个并发进程,方法是在后台运行一些进程(这是一个交互式 shell 概念——它基本上意味着 fork 并且不要等待),或者使用管道。 subprocess.call() 等待进程完成,但底层的Popen 将启动任意数量的进程而无需等待,除非您特别要求。
  • @tripleee 是的,在我使用 subprocess.Popen([script1]) 启动 script1 后它起作用了,它将 script1 作为后台进程运行。谢谢
  • "under one process" 听起来你想启动一个shell进程和source所有给定的脚本。如果您的意思是同时运行(“当脚本运行时”),那么它是 stackoverflow.com/q/14533458/4279 的副本,如果不是您想要的,请发表评论。

标签: python subprocess popen


【解决方案1】:

虽然 OP 显然拒绝澄清他的问题,但他留下了一条评论,表明他正在寻找 subprocess.Popen()

procs = []
for cmd in ['scripts/script1.sh', 'scripts/script2.sh', 'scripts/script3.sh']:
    procs.append(subprocess.Popen([cmd]))

您最终应该wait 为您已启动的进程。

【讨论】:

    【解决方案2】:

    看来您需要并行进程。查看多处理模块。这是很好的例子:[https://pymotw.com/2/multiprocessing/basics.html][1]

    【讨论】:

      猜你喜欢
      • 2017-09-11
      • 1970-01-01
      • 2021-06-03
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多