Russian Qt Forum

Qt => Общие вопросы => Тема начата: MelkorBSD от Апрель 26, 2009, 19:55



Название: QProcess & awk
Отправлено: MelkorBSD от Апрель 26, 2009, 19:55
Есть конвеерная комманда:
Код:
bsdlabel /dev/ad0s1 | grep -v "^#" | grep -v "partitions" | awk '{print $1 " " $2 " " $3 " " $4;}'

Кодирую ее следующим образом:
Код:
  QProcess *Process1 = new QProcess();
  QProcess *Process2 = new QProcess();
  QProcess *Process3 = new QProcess();
  QProcess *Process4 = new QProcess();
  Process1->setStandardOutputProcess(Process2);
  Process2->setStandardOutputProcess(Process3);
  Process3->setStandardOutputProcess(Process4);
  QString BSDLabelStr = "";
  Process1->start("bsdlabel /dev/ad0s1");
  Process2->start("grep -v \"^#\"");
  Process3->start("grep -v \"partitions\"");
  Process4->start("awk \'{print $1 \" \" $2 \" \" $3 \" \" $4;}\'");
  if (Process4->waitForReadyRead())
  {
    BSDLabelStr=Process4->readAll();
  }
  Process4->waitForFinished();
  QFile File("out.txt");
  if (!File.open(QIODevice::WriteOnly | QIODevice::Text))
    return -1;
  QTextStream Out(&File);
  if (Process4->exitCode()==0)
    Out << BSDLabelStr;
  else
    Out << "Failed";
  File.close();

В результате в файле out.txt "Failed". Причем проблема именно в четвертом процессе конвейера.

Может я что-то неправильно 4-м процессе экранировал?


Название: Re: QProcess & awk
Отправлено: Rcus от Апрель 26, 2009, 20:24
В доках по QProcess указано как следует экранировать аргументы, содержащие пробелы. Непонятно только две вещи: нужны ли в данном случае пайпы и не проще ли передавать аргументы отдельно?


Название: Re: QProcess & awk
Отправлено: MelkorBSD от Апрель 26, 2009, 21:08
В доках по QProcess указано как следует экранировать аргументы, содержащие пробелы. Непонятно только две вещи: нужны ли в данном случае пайпы и не проще ли передавать аргументы отдельно?
Спасибо