Qt QProcess如何写入标准?

时间:2017-07-26 20:02:00

标签: c++ qt

我正在启动一个QProcess来打开cmd.exe。

我想写入std in将命令发送到cmd.exe,我想收到它的输出。

QProcess mProcess = new QProcess(this);
mProcess->setReadChannelMode(QProcess::SeparateChannels);
mProcess->start("cmd");

QApplication::processEvents();
QString s(mProcess->readAllStandardOutput());
writeToConsole(s);

这一切都很好。过程开始,我得到输出。但是,我现在不能再写这个过程了。我查看了QProcess文档,但我没有看到任何写入标准的方法。我已经尝试过mProcess-> write(data);但那没有做任何事情。

如何将标准写入正在运行的进程?

3 个答案:

答案 0 :(得分:1)

您必须仅使用write函数来写入标准。

但重要的是你必须使用void QProcess::closeWriteChannel()关闭写通道。

请参阅以下文档。

http://doc.qt.io/qt-5/qprocess.html#closeWriteChannel

答案 1 :(得分:0)

在继续下一步行动之前,您应该等待操作完成。

<CFSET RoundedValue = ceiling(totalWeight / 5) * 5> 

将输出直接发送回正在执行的程序似乎很奇怪。或者,您可以将QProcess mProcess = new QProcess(this); mProcess->setReadChannelMode(QProcess::SeparateChannels); //Start the process mProcess->start("cmd"); QApplication::processEvents(); mProcess->waitForStarted(); // Read the output mProcess->waitForReadyRead(); QString output(mProcess->readAllStandardOutput()); mProcess->closeReadChannel(); // Write the data mProcess->write(output); mProcess->waitForBytesWritten(); mProcess->closeWriteChannel(); // Wait for finished mProcess->waitForFinished(); 信号连接到可在其他位置处理输出的插槽。

答案 2 :(得分:0)

我在这里犯的错误不是将\ n放在多个命令的末尾。

''''
        // 1st command
        mProcess->write(output1 + "\n");
        mProcess->waitForBytesWritten();


        // 2nd command
        mProcess->write(output1 + "\n");
        mProcess->waitForBytesWritten();

       // Wait for finished
       mProcess->waitForFinished();


       mProcess->closeWriteChannel();
''''