parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

^file::exec[binary;$stdin[$file]]

G_Z 28.10.2015 00:16

В продолжение темы о зависании gzip в ожидании данных.

Дело происходит под Win.

Пытаюсь распаковать gz на лету, передав файл в $.stdin и взяв результат в $.stdout.
В качестве распаковшиков пробую 7zip и gzip.

В случае передачи файла архива в text-режиме 7zip не может распаковать его целиком, но получает в потоке ввода и пишет в поток вывода.
Если же передавать в binary-режиме — процесс повисает и не отвечает.
Причём, в диспетчере задача указано: прочитано — 479 байт (размер архива + 1 байт), записано — 3219 байт (точный размер извлечённого файла).
То есть, чтение и запись прошли, но процесс продолжает чего-то ждать, а его в свою очередь ждёт Парсер.
$result[^file::exec[binary;C:\Program Files\7-Zip\7z.exe][
	$.stdin[^file::load[binary;/test.xml.gz]]
][e;-si;-so;-tgzip]]
Gzip ведёт себя несколько иначе.
Вне зависимости от режима считывает 479 байт и ждёт, не записывая ничего.
$result[^file::exec[binary;C:\Program Files (x86)\GnuWin32\bin\gzip.exe][
	$.stdin[^file::load[binary;/test.xml.gz]]
][-cd]]
Парсер в обоих случаях записывает 479 байт и ждёт.

И 7zip и gzip прекрасно работают в консоли, и принимая, и выдавая файл в поток.

Прошу «помощи зала» в поиске причин.