与QProcess Python程序通信
Communicating with QProcess Python program
我正在尝试让Qt应用程序与python程序进行通信。最合乎逻辑的解决方案似乎是在包含Python代码的Qt应用程序中运行QProcess。我想使用 std 输入发送命令,如果适用,则通过 std 输出读取。
但是,即使是这个简单的例子似乎也不起作用。这两个 python 片段:
import os
import time
while True:
print "test"
time.sleep(2)
连同简单的Qt代码:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
process = new QProcess(this);
process->start("/home/user/test.py");
connect(process, SIGNAL(stateChanged(QProcess::ProcessState)), SLOT(printProcessStatus()));
connect(process, SIGNAL(error(QProcess::ProcessError)), SLOT(printProcessError()));
connect(process, SIGNAL(readyRead()), SLOT(printProcessOutput()));
}
void MainWindow::printProcessStatus()
{
qDebug() << process->state();
}
void MainWindow::printProcessError()
{
qDebug() << process->errorString();
}
void MainWindow::printProcessOutput()
{
qDebug() << process->readAll();
}
不打印任何内容。它确实说这个过程是"QProcess::P rocessState(Running(",但我似乎无法将python的打印输出输入到Qt中。同样,我尝试使用 QProcess::write(( 函数写入 python 进程,但这也不起作用。
这不是使用 QProcess 的预期方式吗?有没有更好的方法在Qt应用程序和(子(python程序之间进行通信?
问题似乎是python
缓冲区stdout
的方式(它没有行缓冲(。 如果我将脚本更改为...
#!/usr/bin/env python2
import os
import sys
import time
while True:
print "test"
sys.stdout.flush()
time.sleep(2)
可能有更好的方法可以实现相同的目标,而不必不断显式刷新流。
或者,如果您使用的是 Linux,则可以使用 stdbuf
来控制脚本的输出缓冲。 将进程启动命令更改为...
process->start("stdbuf", QStringList() << "--output=L" << "/home/user/test.py");
相关文章:
- 网站和C++程序在同一台 Linux PC 上的通信
- 如何使用winsock在c++应用程序中实现安全套接字通信
- 使用命名管道在 C# 和C++应用程序之间进行持续通信
- C++程序和未识别程序之间的双向通信
- C# 和C++应用程序之间的通信
- 如何通过具有通信行参数的procdump启动Windows应用程序?
- Electron应用程序和Win32本机桌面应用程序之间的进程间通信
- UDP客户端/服务器程序在不同的IP和端口上通信超过2个插座
- 与QProcess Python程序通信
- 一个使用QtUdpSocket的简单通信c / s应用程序
- 如何实现MATLAB和单独的C++应用程序之间的通信
- Python:使用<cstdio>时与c ++命令行程序的通信不起作用
- 图形驱动程序如何通过程序从CPU到GPU进行通信
- Boost.Python - 与正在运行C++程序的通信
- VC++和Qt应用程序之间使用共享内存进行通信
- 我可以选择跨程序通信
- C 和现有PHP应用程序之间的通信
- 使 .Net 3.5 应用程序与 .Net 4.0 应用程序通信的最稳定方法
- 使用 UDP 的双向通信程序无法正常工作
- 打印到文件的值不正确.串口通信程序