Python lit les sous-processus stdout et stderr séparément tout en préservant l'ordre

J'ai un python sous-processus que je suis en train de lire la sortie d'erreur et de flux. Actuellement, j'ai ça, mais je suis seulement en mesure de lire le stderr après que j'ai terminé la lecture de stdout. Voici à quoi il ressemble:

process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout_iterator = iter(process.stdout.readline, b"")
stderr_iterator = iter(process.stderr.readline, b"")

for line in stdout_iterator:
    # Do stuff with line
    print line

for line in stderr_iterator:
    # Do stuff with line
    print line

Comme vous pouvez le voir, le stderr pour la boucle ne peut pas commencer jusqu'à ce que le stdout boucle est terminée. Comment puis-je modifier cela pour être en mesure de lire à la fois dans le bon ordre les lignes?

À préciser: j'ai encore besoin d'être capable de dire si une ligne est venu de stdout ou stderr parce qu'ils seront traités différemment dans mon code.

source d'informationauteur Luke Sapan