Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2010 17:45:01

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

Поймать вывод patch

Вызываю никсовый patch через subprocess. Прикол в том, что он пишет вывод только в файл, но никак не на стандартный вывод, что бы я не делал. Патчится один файл, но он громадный и хочется операцию всю с ним провести на лету, без сохранения в tmp. Как провести операцию с максимально возможной производительностью? Файл, который патчится, размером около ста метров, да и сам патч немаленький.



Офлайн

#2 Янв. 20, 2010 12:10:39

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

Поймать вывод patch

Пытаюсь, опять же, сделать через named pipes, вот так:

fifo = os.path.join(self.path, 'pipe')
print fifo
os.mkfifo(fifo)
op = os.popen('cat '+ fifo)
proc = Popen(['patch', current_keyframe, '--input='+fpath, '--output='+fifo], stdin=PIPE, stdout=PIPE)
os.unlink(fifo)
print op.read()
В pipe попадает правильно пропатченный кейфрейм, однако на месте вызова Popen скрипт зависает. Что не так?



Офлайн

#3 Янв. 20, 2010 12:48:09

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

Поймать вывод patch

Все, справился сам.

        if not key:
fifo = os.path.join(self.path, 'pipe')
os.mkfifo(fifo)
op = os.popen('cat '+ fifo)
proc = call(['patch', current_keyframe, '--input='+fpath, '--output='+fifo])
os.unlink(fifo)
dmp = op.read()



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version