Найти - Пользователи
Полная версия: Система контроля версий
Начало » Python для экспертов » Система контроля версий
1 2
Enchantner
Подниму эту темку, так как несколько изменился приоритет. Для скорости решили использовать не диффлиб, а стандартный никсовый diff, вызываемый через subprocess. Так вот, у меня есть поток вывода mysqldump в пайпе и полнотекстовый дамп на диске. Нужно как-то на лету прогнать их через diff и разницу в виде, скажем, unified-диффа кинуть в файл. diff поток на вход воспринимать отказывается… Как делать?
Андрей Светлов
А чем скорость не устраивала? Или умозрительно решили?
Enchantner
Андрей Светлов
Начальство попросило, так сказать :)
Пытаюсь через mkfifo перенаправить вывод в пайп, а потом подключить его на stdin. Получается пока плохо.
Делаю так:
fifo = 'pipe'
os.mkfifo(fifo)
op = os.popen('cat ' + fifo)
print >> open(fifo, 'w'), output
os.unlink(fifo)
proc = Popen(['diff', dumpfile, '--unified'], stdout=PIPE, stdin=op)
выдает “неверный второй аргумент”.
И вообще, как подать на вход два потока?
Андрей Светлов
Уважаю решение!!! Заниматься оптимизацией без предварительных измерений - напрасно тратить время. Дурная работа.
Дался вам этот fifo - кладите сразу в Popen.stdin и все будет работать.
Enchantner
Андрей Светлов
Как? Я уже всю голову сломал. Поделитесь примером, пожалуйста.
Андрей Светлов
Нет уж. Это вы поделитесь своим неработающим примером - а я его поправлю.
Откровенно говоря присутствует нехватка свободного времени…
Enchantner
Андрей Светлов
уже сделал все :)
proc = Popen(['diff', last_keyframe, '-', '--unified'], stdin=PIPE, stdout=PIPE)
proc.stdin.write(output)
result = proc.communicate()[0]
Lexander
Сработал волшебный пендель :)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB