2013-11-13 6 views
0

Я могу создать .tar.gz файл, используяпечати tar.gz на стандартный вывод в Python

with tarfile.open(archive, 'w:gz') as archive_fd: 
    add_files_to_tar('.', archive_fd) 

и это работает отлично. Но иногда я хочу распечатать эти файлы до stdout (если я выполню команду через SSH)

У кого-нибудь есть идея, как это сделать? Мой старый код Баш-то вроде этого

tar -czf - $files >&1 

или

tar -czf - $files >/filename 
+1

Что такое 'add_files_to_tar'? –

+0

метод добавления файла в архив. Вы можете заменить это archive_fd.add («имя файла») – user2988599

ответ

1

Использование fileobj=sys.stdout и символ трубы (чтобы указать потоковый режим) в строке режима.

Это похоже на tar czf - .:

with tarfile.open(archive, 'w|gz', fileobj=sys.stdout) as archive_fd: 
    archive_fd.add('.') 

Это проверено на Linux; Я предполагаю, что это не удастся в Windows. См. this question для решения этой проблемы.

Ссылки:

+0

Спасибо, это работает отлично для меня (на Linux) :) спасибо за эталонными ссылки – user2988599

+0

Вы радушны. Пожалуйста, не забудьте проголосовать за ответы, которые вы нашли полезными, и принять ответ, который решил вашу проблему. –

2

Я думаю, вы можете просто открыть архивный файл в потоковом режиме и передать его sys.stdout:

import sys 
with tarfile.open(fileobj=sys.stdout, mode='w|gz') as archive_fd: 
    add_files_to_tar('.', archive_fd) 

Документация tarfile говорит, что это не закрывает stdout, когда он заканчивается.

+0

Спасибо, он отлично работает для меня :) – user2988599

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