H5W3
当前位置:H5W3 > 其他技术问题 > 正文

python代码执行顺序问题

现有两个脚本,一个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

import sys

#...其他代码...

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

#...其他代码...

本文地址:H5W3 » python代码执行顺序问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址