回复: QProcess调用控制台程序,不弹出界面?
#16 回 dbzhang800 的帖子 [foxgod 09-24 16:08]
dbzhang800:多看看QProcess的Manual,这应该都是比较基本的操作。感觉上一个 QProcess::setStandardOutputFile() 可能就足够了。
取决于你的设计,可以写出多种差异很大的Qt代码,来实现这任务。
....... (2014-09-24 16:04)
你给我的建议是NULL??,要么给个代码,要么给个思路,要么直接无视我的帖子.
#17 回 foxgod 的帖子 [dbzhang800 09-24 16:52]
foxgod:
你给我的建议是NULL??,要么给个代码,要么给个思路,要么直接无视我的帖子.
实在给不出来有意义的代码。因为到现在为止,不清楚你的具体要求是什么:包括一开始你要求的Console和你的log什么关系。你是同一个控制台程序执行多次还是多个控制台程序分别执行等等。思路的话,难道从从一开始我一直都在说不是思路?
for (int i=0; isetStandardOutputFile(QStringLiteral("Out-%1.log").arg(i));
p.start("youConsole");
}
#18 回 dbzhang800 的帖子 [foxgod 09-24 17:02]
dbzhang800:实在给不出来有意义的代码。因为到现在为止,不清楚你的具体要求是什么:包括一开始你要求的Console和你的log什么关系。你是同一个控制台程序执行多次还是多个控制台程序分别执行等等。思路的话,难道从从一开始我一直都在说不是思路?
for (int i=0; isetStandardOutputFile(QStringLiteral("Out-%1.log").arg(i));
p.start("youConsole");
这个是无法保存log信息的,你可以自己做实验。
如果这次你在不懂我说的,请直接无视我。
#19 回 foxgod 的帖子 [dbzhang800 09-24 17:32]
foxgod:
不知道是我的表达有问题,还是你的理解有问题,我不知道我那里说的不清楚了,我想做个守护程序,这个程序可以自动启动我用QT写的别的程序,这些程序是控制台程序,用PROCESS的SATart函数启动,是可以启动,但是不弹出界面,查看了VS的和QT的源码,一看QT就不让弹出界面,但是VS有个参数可以让弹出来,不弹出了就算了,但是我的控制程序里面有很多log信息,你不弹出来界面,我看不到信息,起码可以让我保存下来,我想做的就是我的守护程序,一次启动我写的不同的QT程序(这里至少有10个以上),每个程序里面打印的log信息,我想保存起来,你给的代码
p->setStandardOutputFile(QStringLiteral("Out-%1.log").arg(i));
p.start("youConsole");
这个是无法保存log信息的,你可以自己做实验。
.......
好吧,都怪我手贱。还真的用Qt4.8 和 Qt5.3 试了一下:
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
for (int i=0; isetStandardOutputFile(QString("out-1.log").arg(i));
p->setStandardErrorFile(QString("err-%1.log").arg(i));
p->start("g++");
//p->start("cmd");
}
return a.exec();
}
我只能说,在我这儿工作一切正常。
当然我眼神也不好,前面那么多帖子也我都没看到你说的是"守护程序"。我暂且理解它是Windows下的“服务”吧,这个我没有编写服务进行测试,不清楚Qt在这方面会不会有BUG。
#20 回 dbzhang800 的帖子 [foxgod 09-24 17:47]
dbzhang800:好吧,都怪我手贱。还真的用Qt4.8 和 Qt5.3 试了一下:
#include
....... (2014-09-24 17:32)
你写的和我写的是一样的,但是就像我上面说的一样,用PROCESS吊起来的程序,运行后的LOG信息,没有写在out-1.log文件里面,我想说的就是这个.我这里就是这样的情况,当然我的程序不是G++
QProcess *process = new QProcess;
QString str = QCoreApplication::applicationDirPath(); str = str + "/" + m_MatrixName.at(i);
QString output = m_MatrixName.at(i)+".txt";
process->setStandardOutputFile(output);
process->setProgram(str);process->start(QIODevice::Truncate);