Я портирую bash-скрипт на python 2.6 и хочу заменить какой-то код:
cat $( ls -tr xyz_`date +%F`_*.log ) | filter args > bzip2
Думаю, мне нужно что-то похожее на пример «Замена трубопровода оболочки» на http://docs.python.org/release/2.6/library/subprocess.html , аля ...
p1 = Popen(["filter", "args"], stdin=*?WHAT?*, stdout=PIPE)
p2 = Popen(["bzip2"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
Но я не уверен, как лучше всего предоставить значение p1
stdin
, чтобы оно объединяло входные файлы. Кажется, я мог бы добавить ...
p0 = Popen(["cat", "file1", "file2"...], stdout=PIPE)
p1 = ... stdin=p0.stdout ...
... но это, похоже, выходит за рамки использования ( медленные, неэффективные) каналы для вызова внешних программ со значительной функциональностью. (Любая достойная оболочка выполняет cat
внутри.)
Итак, Я могу представить собственный класс, который удовлетворяет требованиям API файлового объекта и, следовательно, может использоваться для stdin p1, объединяя произвольные другие файловые объекты. ( РЕДАКТИРОВАТЬ: существующие ответы объясняют, почему это невозможно )
Имеет ли python 2.6 механизм, удовлетворяющий эту потребность / желание, или может другой Попен
в cat
считаться прекрасным в кругах питонов?
Спасибо.