LINUX.ORG.RU

[Python] Обработка построчно с shell-потока

 


0

1

Shell команда запускается из скрипта python. Например, find. Он выводит построчно адреса найденных файлов в поток.
Надо по ходу обрабатывать каждую строчку этого потока, например, запихивать каждую строчку в массив.

Какие могут быть варианты решения данной задачи?



Последнее исправление: moscwich (всего исправлений: 1)

Мало понял, вот так что-ли?
find *.* | python te.py

Тогда:

import sys
print(sys.stdin.readlines()) #или как ты хочешь обработать строки.

zJes ★★
()
Ответ на: комментарий от Zhbert

> Заставить его писать в файл и из файла дергать питоном, например.

У меня тоже такая мысль сразу возникла. Но как дергать питоном? Не открывать же файл много раз в цикле...

moscwich
() автор топика
Ответ на: комментарий от moscwich

Ну, линукс тебе не винда, в нем можно один файл открыть несколькими прогами ЕМНИП. Получается что - запускаешь скрипт, дергаешь первую строку. Дальше два варианта - либо в цикле мониторишь, когда изменится размер файла, тогда дергаешь следующую строку, либо ждешь какоето заданное время и дергаешь.

Zhbert ★★★★★
()
Ответ на: комментарий от zJes

Нет. shell команда запускается из скрипта python. Ну собственно надо обрабатывать вывод (поток) по ходу и построчно.

moscwich
() автор топика
Ответ на: комментарий от Zhbert

> Дальше два варианта - либо в цикле мониторишь, когда изменится размер файла, тогда дергаешь следующую строку, либо ждешь какоето заданное время и дергаешь.

Ну я об этом и говорю. Это быдлокод получается, потому что в этом цикле придется каждый раз файл снова открывать. Или как без этого можно?

moscwich
() автор топика
Ответ на: комментарий от moscwich

Зачем его каждый раз открывать? Открыл один раз, дернул строку. Подождал, из него же дернул строку снова.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Блин. У меня ошибка была. Сорри, воркает и так, однако...

moscwich
() автор топика

Спасибо

Тока мне в документации этой мало че понятно...

Как быть если исполнить надо не просто find *, а:

'find '+dirsel.get_filename()+' -iname '+str.get_text()
И сложнее будет...

Ну и, да, что приведенный код подетально значит?

moscwich
() автор топика
Ответ на: Спасибо от moscwich

>Как быть если исполнить надо не просто find *, а:

передаёшь ['find', dirsel.get_filename, '-iname', str.get_text()]

Тока мне в документации этой мало че понятно...

Там всё элементарно. Прочитай пару раз, потренируйся в консоли.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.