在执行下一个命令之前,有没有一种方法可以等待(在bash脚本中)python程序(在新终端中启动)结束?

2024-09-30 14:18:46 发布

您现在位置:Python中文网/ 问答频道 /正文

为了自动化模拟,我创建了一个bash脚本(参见beelow),并行运行3个python程序,每个程序都与套接字互连,每个程序都在一个新的终端中。(软件的行为要求3个子程序在单独的终端中运行)

#!/bin/bash
    
gnome-terminal -- ./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v
gnome-terminal -- ./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml --simulate -v
gnome-terminal -- ./simulation/traces/simulate_traces.py -m September

我想做的是重新执行相同的3个pythons程序,但只有在之前的3个程序结束后才使用不同的参数。但在这里,这3个程序是同时启动的,我无法知道在我的bash脚本中何时结束

我试图简单地在脚本末尾添加相应的命令,但从逻辑上讲,它不会等到上一次模拟完成后才启动接下来的3个程序

所以我的问题是,在执行bash脚本的下一行之前,有没有办法知道程序何时在另一个终端结束


Tags: py程序脚本bashconfig终端软件server
1条回答
网友
1楼 · 发布于 2024-09-30 14:18:46

我假设gnome终端只用于并行运行程序,如果没有它,每个Python脚本都将在前台运行

在这种情况下,您可以在后台使用符号&(而不是gnome终端)运行它们,并使用$!获取它们的进程ID,最后使用wait命令等待它们,例如:

#!/bin/bash
    
./orchestrator.py -c config/orchestrator/configWorstCaseRandomV.yml -v &
pid1=$!
./server.py -c config/server/config.yml -s config/server/systems/ault14mix.yml  simulate -v &
pid2=$!
./simulation/traces/simulate_traces.py -m September &
pid3=$!
wait $pid1 $pid2 $pid3

相关问题 更多 >