QProcess 从标准输入和标准输出的文件开始

Posted

技术标签:

【中文标题】QProcess 从标准输入和标准输出的文件开始【英文标题】:QProcess start with files from stdin and stdout 【发布时间】:2012-06-25 18:28:35 【问题描述】:

我需要从 QProcess 运行以下语句:

programm < file1 > file2

在 QT 中:

QProcess *proc = new QProcess;
proc->setReadChannelMode(QProcess::SeparateChannels);
proc->start("program < \"file1\" > \"file2\"", QIODevice::ReadWrite);

但不知何故,它不起作用。我在任务管理器中看到,该命令看起来正确,但似乎是在没有任何参数的情况下执行程序。我的错误在哪里?

【问题讨论】:

ReadWrite 是默认模式,所以你不必指定它。 【参考方案1】:

分别使用&lt;&gt; 读取和写入文件是shell 的语法特性。如果您使用sh 之类的shell 运行命令行programm &lt; file1 &gt; file2,则只会执行命令program,根本没有任何参数。将输入和输出的程序通道分配给给定文件与命令本身没有任何关系。

但是可以告诉QProcess 使用这些方法来模拟这种行为:

QProcess::setStandardInputFile(QString fileName) QProcess::setStandardOutputFile(QString fileName)

所以你的代码变成了:

QProcess *proc = new QProcess;
proc->setReadChannelMode(QProcess::SeparateChannels);
proc->setStandardInputFile("file1");
proc->setStandardOutputFile("file2");
proc->start("program");

【讨论】:

这很有趣!我已经尝试过了,但是没有用。 QProcess 忽略文件的工作目录。我必须用完整路径指定它们。谢谢! @Oliver 注意工作目录 != 应用程序目录。也许 QProcess 甚至使用另一个目录来查找文件......

以上是关于QProcess 从标准输入和标准输出的文件开始的主要内容,如果未能解决你的问题,请参考以下文章

QProcess -> 在 Linux 上从 sftp 读取标准输出

试图从生成的 QProcess 中读取标准输出

Qt4、QProcess、R:标准输出中的垃圾,行较长

Qt QProcess::finished() 信号没有这样的插槽

linux重定向标准输入输出,标准错误

QT软件开发: QProcess启动进程完成交互并获取输出