Неожиданный вывод Попен - PullRequest
0 голосов
/ 14 января 2020

Я использую конструктор Popen из subprocess для захвата вывода команды, которую я выполняю в моем скрипте python:

import os
from subprocess import Popen, PIPE

p = Popen(["my-cli", "ls", "/mypics/"], stdin=PIPE, stdout=PIPE,stderr=PIPE)
output, err = p.communicate()

print(output)
print(output.count('jpg'))

Моя цель - сохранить выходной файл имена как массив строк.

Однако, когда я печатаю output, я замечаю, что вместо сохранения имен файлов в виде строк, скрипт сохраняет каждый байт (букву) каждого файла в виде строки. Следовательно, вывод на печать выглядит следующим образом:

f
i
l
e
.
j
p
g

1

Поэтому вместо печати одного имени файла file.jpg я получаю распечатку из 8 отдельных символов, составляющих имя файла. Но выполнение команды ls непосредственно в терминале будет просто перечислять имена файлов строка за строкой, как и должно быть.

Что я делаю не так в этом сценарии и какой здесь обходной путь? Я работаю Python 2.7. Любые предложения приветствуются

.

1 Ответ

0 голосов
/ 14 января 2020

Что это было за my-cli внутри вашего Popen array. Я думаю, что новый символ строки добавляется после каждого вывода символов. Просто удалите это my-cli, и это может помочь вам.

p = Popen(["ls", "/mypics/"], stdin=PIPE, stdout=PIPE,stderr=PIPE)

Надеюсь, это сработает для вас.

...