python 外部exe程序 交互_QProcess与外部程序的调用

本文详细介绍了Python中QProcess模块如何与外部exe程序进行交互,包括启动状态、QProcess作为QIODevice的特性、读写操作、环境设置以及同步进程API的使用。同时提到了在使用过程中需要注意的用户界面响应问题。
摘要由CSDN通过智能技术生成

其实,start()或startDetached()已经整合了上面的三个步骤,如果需要分别设置,请采用以上的方式。

三、启动状态

外部程序未启动时,其状态是NotRunning;

当启动时,其状态转变为Starting,正在启动,但此时还未调用起来;

启动之后,继续变为Running,同时发射出started()信号,此时,可以对QProcess进行读写操作了;

当退出时,其状态改为NotRunning,并发射出finished()信号。finishe()信号会携带退出码和退出状态,可以分别通过exitCode()和exitStatus()来获得。

当发生错误时,QProcess会发出一个error()信号,同样的,也可以通过error()来获得其错误类型,通过state()获得当前程序的状态。

四、QProcess 与 QIODevice

QProcess继承于QIODevice,因此,我们可以把它当作是一个I/O设备进行读写操作。

五、交互

QProcess有两种预定义的输出通道:标准输出stdout与标准错误stderr。

通过setReadChannel()可以选择当前读取输出的通道。

当通道中的数据准备就绪时,QProcess会发出readyRead()信号。如果是标准输出,则发出readyReadStandardOutput()信号;如果是标准错误,则发出readyReadStandardError()信号。

常用的读取方式有read(), readAll()或getChar(),也可以通过readAllStandardOutput()和readAllStandardError()读取标准输出和标准错误通道中的数据。

某些程序需要环境设置才能进行特殊的操作。可以通过setEnvironment()来设置环境变量,通过setWorkingDirectory()来设置工作目录,默认的工作路径是当前调用程序的工作路径。

六、Synchronous Process API (同步进程API)

QProcess提供了一系列的函数以提到事件循环来完成同步操作:

(1)waitForStarted()          : 阻塞,直到外部程序启动

(2)waitForReadyRead()    : 阻塞,直到输出通道中的新数据可读

(3)waitForBytesWritten()  : 阻塞,直到输入通道中的数据被写入

(4)waitForFinished()        : 阻塞,直到外部程序结束

如果在主线程(QApplication::exec())中调用这些函数,可能会造成当前用户界面不响应。

七、主要API

请参考Qt的官方说明:PS:参考链接

从QProcess说开来(一)

从QProcess说开来(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值