鍍金池/ 問答/Python  Linux/ python代碼執(zhí)行順序問題

python代碼執(zhí)行順序問題

現(xiàn)有兩個(gè)腳本,一個(gè)shell腳本,一個(gè)python腳本,在python里面調(diào)用執(zhí)行shell腳本,等待shell執(zhí)行完畢返回信號(hào)后繼續(xù)執(zhí)行下面的步驟:
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)

在命令行執(zhí)行后發(fā)現(xiàn),并沒有先輸出start running ...,而是等待了20s后和后面一起輸出的,請(qǐng)問這是為什么?
PS: 測(cè)試這個(gè)因?yàn)檎诖罱ㄒ粋€(gè)順序執(zhí)行數(shù)據(jù)處理任務(wù)的流程,因?yàn)槊恳徊蕉紩?huì)對(duì)數(shù)據(jù)進(jìn)行處理生成處理后的數(shù)據(jù)被后面繼續(xù)利用,所以這里要捕捉每一步執(zhí)行完的信號(hào),以便后續(xù)任務(wù)進(jìn)行。然后想請(qǐng)問下有沒有別的不是這么呆瓜的方法 :) 謝謝!
順便一提的是這是在Windows下的git-bash(MINGW64)里測(cè)試的

回答
編輯回答
忠妾

這個(gè)應(yīng)該和標(biāo)準(zhǔn)輸出的緩沖區(qū)有關(guān)系, 在我的機(jī)器(MAC OS)上會(huì)先輸出 start running ...
正如你期待的一樣, 建議引入sys, print后進(jìn)行flush

import sys

#...其他代碼...

print('start running ...')
sys.stdout.flush()

#...其他代碼...
2017年6月3日 02:38