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】:
分别使用<
和>
读取和写入文件是shell 的语法特性。如果您使用sh
之类的shell 运行命令行programm < file1 > 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 读取标准输出