现有两个脚本,一个shell脚本,一个python脚本,在python里面调用执行shell脚本,等待shell执行完毕返回信号后继续执行下面的步骤:echo.sh
#!/bin/bash
sleep 20s
echo hello
test.py
#!/usr/bin/env python3
# coding: utf-8
import os
print('start running ...')
signal = os.popen('sh echo.sh')
res = list(signal)[0].strip()
if res=='hello':
print('hello world')
else:
print('bad idea: '+res)
在命令行执行后发现,并没有先输出start running ...
,而是等待了20s后和后面一起输出的,请问这是为什么?
PS: 测试这个因为正在搭建一个顺序执行数据处理任务的流程,因为每一步都会对数据进行处理生成处理后的数据被后面继续利用,所以这里要捕捉每一步执行完的信号,以便后续任务进行。然后想请问下有没有别的不是这么呆瓜的方法 :) 谢谢!
顺便一提的是这是在Windows下的git-bash(MINGW64)里测试的
这个应该和标准输出的缓冲区有关系, 在我的机器(MAC OS)上会先输出
start running ...
正如你期待的一样, 建议引入sys, print后进行flush