2014-12-13 2 views
1

Я хочу, чтобы имитировать следующие Unix команды:новообращенный вывод команды находят в массив строк в Python

f=`find . -name "*.pdf"` 
for file in $f; do echo "$f"; done 

Я имею следующую команду питона:

out= subprocess.check_output(["/usr/bin/find", ".", "-name", "*.pdf"]).strip() 

Но я не могу доступ out[0] или out[1] и так далее. Можно ли вернуть вывод в python в виде массива строк, чтобы я мог перебирать каждый из них и что-то делать с ним? Thanks

+1

Почему, когда 'os.walk()' это вещь? –

+0

Это просто пример, который я привел, чтобы проиллюстрировать, что я хочу. Чтобы перефразировать это по-другому - я хочу выполнить команду, которая возвращает вывод, и я хочу перебирать каждую строку в этом выпуске. Поэтому 'os.walk()' не помогло бы в этом случае использования. – Bill

ответ

1

str.strip() удалить пробелы вокруг строки. Вы должны str.splitlines разделить строки:

>>> 'a\nb'.strip() 
'a\nb' 
>>> 'a\nb\n'.splitlines() 
['a', 'b'] 

out = subprocess.check_output(["/usr/bin/find", ".", "-name", "*.pdf"]).splitlines() 
+0

Удивительный! именно то, что я искал. – Bill

+1

Нет, использование 'strip' неверно, а использование' splitlines() 'неверно, если' find' когда-либо выводит имя файла, содержащее новую строку. Безопасным и надежным способом является использование 'find -print0' и разделение на null. Это FAQ. – tripleee

+0

@tripleee Как можно разделить на нули? – Bill

Смежные вопросы