LINUX.ORG.RU

[qt4] После обновления с Lenny до Squeeze не могу нормально читать из процесса.


0

1

Я потихоньку писал гуи для R, ориентированный на создание «отчетов» (чтобы можно было делать что угодно, перебирать варианты, потом убрать лишнее и сделать аккуратный файл с выводом).
После того, как я обновился до сквиза, возникли проблемы с чтением стандартного вывода QProcess (надо сказать, что в этой версии Qt многое, видимо, изменилось, потому что теперь те же тексты подсказки автодополнения, которые не попадали в stdin/stderr раньше, о чём я тут жаловался, теперь попадают туда, как я и ожидал). Теперь, если передать R строку длиннее 76 символов, то в выводе (в той части, где R продублирует строку - она теперь тоже попадает в stdin) будет какой-то мусор. Причём мусор будет разный, в зависимости от того, запустить ли программу из консоли или, скажем, из файлового менеджера:
http://dl.dropbox.com/u/971118/from_cp.png - если из консоли, то только лишние пробелы и часть «обрезка» строки.
http://dl.dropbox.com/u/971118/from_fm.png - если из фм, то полный мрак. Мусор + строка режется и повторяется разными кусками.
Что это R - вряд ли. Если пайпить комманды в R и забирать обратно, проблем нет. Что я где-то в коде нагадил - может быть, но я постарался исключить этот вариант, сделав минимальную версию (только читает и пишет, как на скринах). Если что, этот сниппет тут: http://dl.dropbox.com/u/971118/qrgui.tar.bz2. Пробовал я и по-разному забирать вывод у R, вплоть до обработки каждого из элементов QByteArray в цикле напрямую - не помогает. Попробовал и поставить вчистую Сквиз в виртуалке и собрать там - то же самое.

В общем, было бы здорово, если кто-то объяснил бы, в чём корень проблемы. Если можно, без предложений использовать биндинги к R или отдельный R-сервер и общаться с ним по TCP. Даже если так и правильней и надежней (хотя я хотел простую кроссплатформенную морду сделать, так что не факт), то всё равно эта проблема может потом всплыть при других обстоятельствах, уже без всякого R.

★★★★

Обнаружил, что в режиме --slave всё работает, как надо (как и раньше работало), но R прекращает работу после любой ошибки (например, объект не найден -> q()), что не есть хорошо.

Smacker ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.