我正在使用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,并且有机会像文件(输入和输出)一样处理它 . 但是如果单词将在文件中单独写入文件并不重要 . 就我而言,它确实很重要 .
谁能帮我?
1 回答
This答案解决了你的问题,我相信 .