Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C++;Qt应用程序_C++_Qt_Raspberry Pi - Fatal编程技术网

C++ 从C++;Qt应用程序

C++ 从C++;Qt应用程序,c++,qt,raspberry-pi,C++,Qt,Raspberry Pi,我有一个python脚本,大约每10秒向控制台输出一次。 我想从C++代码中运行脚本,并继续运行直到继续关闭应用程序。如果我使用popen,我可以一行一行地获取输出,而不必等待脚本“完成”,但我现在关闭应用程序时无法终止它 有没有一种方法可以在脚本吐出时读取其输出,并在关闭qt应用程序之前保持脚本运行 谢谢 允许您从代码调用外部进程。该文档包括有关如何在程序中关闭它的信息。您还可以使用读/写通道进行通信 文档和方法说明中有一些示例可供入门使用。您看过吗?文档说明了如何从代码关闭进程,并且它有标准

我有一个python脚本,大约每10秒向控制台输出一次。 我想从C++代码中运行脚本,并继续运行直到继续关闭应用程序。如果我使用popen,我可以一行一行地获取输出,而不必等待脚本“完成”,但我现在关闭应用程序时无法终止它

有没有一种方法可以在脚本吐出时读取其输出,并在关闭qt应用程序之前保持脚本运行

谢谢

允许您从代码调用外部进程。该文档包括有关如何在程序中关闭它的信息。您还可以使用读/写通道进行通信


文档和方法说明中有一些示例可供入门使用。

您看过吗?文档说明了如何从代码关闭进程,并且它有标准的读/写通道与之通信。@MatthiasBonora谢谢!!我见过这个类,但当我尝试它时,我遇到了一个完全不同的问题,python没有刷新标准输出缓冲区。一旦我解决了这个问题,QProcess就像一个魔咒一样工作,非常棒!如果你愿意的话,可以这样回答,这样我就可以给你信用了。我希望这能让每个人都更容易看到。这就是解决方案,我刚才忽略了它,因为我有两个不同的问题。首先,我的python和C脚本没有刷新stdout缓冲区,因此,一旦我在python中添加了sys.stdout.flush(),在C中添加了setbuf(stdout,NULL),我的脚本就正确地写入了std out。一旦工作正常,使用QProcess的readyReadStandardOutput信号和readAllStandardOutput方法,我可以正确地看到所有输出!谢谢@MatthiasBonora@phil.harlowPython中的控制台缓冲区保证在应用程序退出时刷新——因此,如果脚本运行完成并且没有提前中止/崩溃,它应该刷新其缓冲区。同样的情况也适用于C运行时——只要
main
返回,任何半正常的实现都会刷新stdout/stderr缓冲区。我认为你的问题并不是你想象的那样。@KubaOber你说得对,在关闭我的应用程序时,我会立即看到我的python脚本的所有输出。问题是,我希望看到这些消息,因为它们是由Python逐行推出的,所以在Python中的PrimTf语句之后添加sys .StdOut.FrHuffE(),现在推导出缓冲区,并让它在C++中显示。这就是导致我认为QProcess readyReadStandardOutput信号不工作的一个问题,因为它在最后只触发了一次。一旦我修复了python缓冲区刷新,我就能够找出QProcess信号,一切都很好!