Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 7, 2010 17:55:36

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Система контроля версий

Подниму эту темку, так как несколько изменился приоритет. Для скорости решили использовать не диффлиб, а стандартный никсовый diff, вызываемый через subprocess. Так вот, у меня есть поток вывода mysqldump в пайпе и полнотекстовый дамп на диске. Нужно как-то на лету прогнать их через diff и разницу в виде, скажем, unified-диффа кинуть в файл. diff поток на вход воспринимать отказывается… Как делать?



Офлайн

#2 Янв. 7, 2010 18:38:16

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Система контроля версий

А чем скорость не устраивала? Или умозрительно решили?



Офлайн

#3 Янв. 7, 2010 18:48:35

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Система контроля версий

Андрей Светлов
Начальство попросило, так сказать :)
Пытаюсь через 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)
выдает “неверный второй аргумент”.
И вообще, как подать на вход два потока?



Отредактировано (Янв. 7, 2010 19:26:46)

Офлайн

#4 Янв. 7, 2010 19:29:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Система контроля версий

Уважаю решение!!! Заниматься оптимизацией без предварительных измерений - напрасно тратить время. Дурная работа.
Дался вам этот fifo - кладите сразу в Popen.stdin и все будет работать.



Офлайн

#5 Янв. 7, 2010 19:39:23

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Система контроля версий

Андрей Светлов
Как? Я уже всю голову сломал. Поделитесь примером, пожалуйста.



Офлайн

#6 Янв. 9, 2010 11:40:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Система контроля версий

Нет уж. Это вы поделитесь своим неработающим примером - а я его поправлю.
Откровенно говоря присутствует нехватка свободного времени…



Офлайн

#7 Янв. 9, 2010 12:45:51

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Система контроля версий

Андрей Светлов
уже сделал все :)

proc = Popen(['diff', last_keyframe, '-', '--unified'], stdin=PIPE, stdout=PIPE)
proc.stdin.write(output)
result = proc.communicate()[0]



Офлайн

#8 Янв. 9, 2010 13:52:19

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Система контроля версий

Сработал волшебный пендель :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version