Я использую QProcess для связи с консольным приложением: я пишу несколько слов и читаю результаты. Но я хочу написать строку через QProcess. Например, у меня есть следующее консольное приложение:
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
string action;
do
{
cout << "(test)";
cin >> action;
cout << action;
if(action.length() > 10)
{
cout << "\t very long string";
}
cout << endl;
}
while(action != "exit");
return 0;
}
Поэтому я не могу передать параметры через QProcess :: exec или QProcess :: start, потому что он передает параметры в char * argv []. Я должен передать его после запуска QProcess. Я пытался использовать QProcess :: write, но есть проблема: если я использую
process.write("oneWord\n");
я добьюсь успеха Но если я использую
process.write("several words\n");
моя программа напишет все это слово отдельно и похоже
process.write("several\n");
process.write("words\n");
Консольное приложение не распознает его как одну строку. Я пробовал использовать разные способы: написать строку в двойных скобках,
process.write("\"several words"\\n");
а также
process.write("\"several words\n""\);
использовать защищенные методы QIODEvice::setOpenMode
и установить QIODevice::Text
флаг, использовать QDataStream
, используйте специальные символы, такие как \r
, \n
, \t
и разные комбинации. Кроме того, я пытался использовать несколько QProcess::write
process.write("several");
process.write("words\n");
Я знаю, что QProcess наследует QIODevice и есть возможность иметь дело с ним как с файлом & выход). Но не имеет значения, будут ли слова записаны в файл отдельно в файле. В моем случае это имеет значение.
Может кто-нибудь мне помочь?
это ответ на ваш вопрос, я считаю.
Других решений пока нет …