QProcess запускается с файлами из stdin и stdout

Мне нужно запустить следующий оператор из QProcess:

programm < file1 > file2

in QT:

QProcess *proc = new QProcess;
proc->setReadChannelMode(QProcess::SeparateChannels);
proc->start("program < \"file1\" > \"file2\"", QIODevice::ReadWrite);

Но как-то не работает. В диспетчере задач вижу, что команда выглядит корректно, но вроде как программа выполняется без каких-либо аргументов. Где моя ошибка?


person Oliver    schedule 25.06.2012    source источник
comment
ReadWrite — это режим по умолчанию, поэтому вам не нужно его указывать.   -  person leemes    schedule 25.06.2012


Ответы (1)


Чтение и запись в файлы с использованием < соответственно > — это синтаксическая функция оболочки. Если вы запустите командную строку programm < file1 > file2, используя оболочку типа sh, будет выполнена только команда program без каких-либо аргументов. Назначение программным каналам ввода и вывода заданным файлам не имеет ничего общего с самой командой.

Но QProcess можно попросить имитировать такое поведение с помощью следующих методов:

QProcess::setStandardInputFile(QString fileName) QProcess::setStandardOutputFile(QString fileName)

Итак, ваш код становится:

QProcess *proc = new QProcess;
proc->setReadChannelMode(QProcess::SeparateChannels);
proc->setStandardInputFile("file1");
proc->setStandardOutputFile("file2");
proc->start("program");
person leemes    schedule 25.06.2012
comment
Это интересно! Я уже пробовал это, но это не сработало. QProcess игнорирует рабочий каталог для файлов. Пришлось указать им полный путь. Благодарю вас! - person Oliver; 25.06.2012
comment
@Oliver Обратите внимание, что рабочий каталог != каталог приложения. И, возможно, QProcess использует даже другой каталог для поиска файлов... - person leemes; 26.06.2012