Я пытаюсь изменить файл на сервере Linux с помощью следующего кода, но это не работает.
QProcess *pProcess = new QProcess(this);
QProcess *pProcess2 = new QProcess(this);
pProcess2->setStandardOutputProcess(pProcess);
QString cmd = QString("plink.exe -ssh %1 -i root.ppk -l root tee /etc/test.txt").arg(strSensorAddress);
pProcess2->start("echo hello");
pProcess->start(cmd);
pProcess->setProcessChannelMode(QProcess::ForwardedChannels);
Я смог сделать это с помощью файла, как это:
QStringList arguments;
arguments << "-ssh" << strSensorAddress << "-i" << "root.ppk" << "-l" << "root" << "-m" << sFileName;
pProcess->setProcessChannelMode(QProcess::MergedChannels);
pProcess->start("plink.exe", arguments);
С файлом, содержащим:
echo hello | tee /etc/factory_test.txt
Но так как содержание должно быть изменено, я бы не стал полагаться на файл.
Я могу выполнять команды, когда нужна только одна команда, например, просто создавая такой файл:
QString cmd = QString("plink.exe -ssh %1 -i root.ppk -l root touch test.txt").arg(strSensorAddress);
pProcess->start(cmd);
Но когда мне нужно сделать 2 команды, такие как echo hello > test.txt
Я не могу это сделать
Вы можете запустить только процесс, а не команду с QProcess. Однако вы можете сделать:
process.start("bash", QStringList() << "-c" << "cat file | grep string");
например.
Других решений пока нет …