CompletedProcess de sous-processus.run() ne retourne pas une chaîne

Selon la Python 3.5 docs, sous-processus.run() retourne un un CompletedProcess objet avec un stdout membre qui contient "Une séquence d'octets, ou une chaîne run() a été appelé avec universal_newlines=True." Je suis le seul à voir une séquence d'octets et non pas une chaîne, qui j'ai été en supposant (espérant) serait équivalent à une ligne de texte. Par exemple,

import pprint
import subprocess

my_data = ""
line_count = 0

proc = subprocess.run(
         args = [ 'cat', 'input.txt' ],
         universal_newlines = True,
         stdout = subprocess.PIPE)

for text_line in proc.stdout:
    my_data += text_line
    line_count += 1

word_file = open('output.txt', 'w')
pprint.pprint(my_data, word_file)
pprint.pprint(line_count, word_file)

Remarque: il utilise une nouvelle fonction en Python 3.5 qui ne fonctionne pas dans les versions précédentes.

Dois-je créer ma propre ligne de mise en mémoire tampon de la logique, ou est-il un moyen d'obtenir Python de le faire pour moi?

Cela n'a pas fonctionner pour moi (3,4) -- qui est attendu?
Je suis l'aide de 3.5. Je vais le rendre plus clair.
Êtes-vous sûr que vous êtes l'obtention d'une séquence d'octets? Vous pouvez print type(proc.stdout) ou quelque chose à vérifier. Vous êtes une itération sur proc.stdout comme si c'est un fichier. L'itération sur un fichier texte vous donne chaque ligne. Une itération sur une chaîne de caractères ou d'octets de la séquence de vous donner chaque personnage/octet. Si vous souhaitez gérer chaque ligne d'une chaîne individuellement, vous pouvez effectuer une itération sur proc.stdout.split('\n') à la place. (Bien que cela ne comprend pas les retours à la ligne à chaque ligne comme une itération sur un dossier.)
Merci. Le chaînage de split() de proc.stdout était ce que je cherchais.

OriginalL'auteur highpost | 2015-12-04