Подтвердить что ты не робот

Как отличать файл и выходной поток "на лету"?

Мне нужно создать файл diff, используя стандартную команду UNIX diff с модулем python subprocess. Проблема в том, что я должен сравнивать файл и поток без создания файла tempopary. Я думал об использовании именованных каналов с помощью метода os.mkfifo, но не достиг хорошего результата. Пожалуйста, напишите простой пример о том, как решить эту проблему? Я пробовал вот так:

fifo = 'pipe'
os.mkfifo(fifo)
op = popen('cat ', fifo)
print >> open(fifo, 'w'), output
os.unlink(fifo)
proc = Popen(['diff', '-u', dumpfile], stdin=op, stdout=PIPE)

но похоже, что diff не видит второй аргумент.

4b9b3361

Ответ 1

Вы можете использовать "-" в качестве аргумента diff для обозначения stdin.

Ответ 2

Возможно, вы можете подумать об использовании модуля difflib python (я связан с примером здесь) и создать что-то, что генерирует и печатает diff напрямую, а не полагаться на diff. Различные методы функций внутри difflib могут получать символьные буферы, которые могут обрабатываться в разных типах.

В качестве альтернативы вы можете построить конвейер оболочки и использовать подстановку процесса так:

diff <(cat pipe) dumpfile # You compare the output of a process and a physical file without explicitly using a temporary file.

Подробнее см. http://tldp.org/LDP/abs/html/process-sub.html