QProcess readall() 问题

hahahaha134051 2015-01-16 09:56:59
在linux下Qt开发,是做pppoe客户端,我使用rp-pppoe。rp-pppoe有1个pppoe-start脚本,执行后在shell里会打印输出字符串(“connected” or "timeout" ,可以确认是有打印输出),那么可以肯定是有数据打印输出的。然后在Qt我使用pppoe-start脚本作为1个QProcess对象,然后把此对象结束后发送SIGNAL" finish() ",与包含读取此进程输出函数连接,调用QProcess "readall()"。调试过程中,照理也应该接收到数据,但是发现读取数据为空串,是为什么?
...全文
452 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahahaha134051 2015-01-19
  • 打赏
  • 举报
回复
引用 2 楼 dbzhang800 的回复:
很关键的一点,你没有提,你调用readAll的时候,你的那个脚本运行结束了没? 如果结束了,你仍没有读到数据,这是一个问题。 如果运行中,你没有读到数据,这是另一个问题。 注:对一个控制台程序来说,在控制台下直接运行和通过其他方式运行,其行为并不一定一样。特别是标准输出这个流,前者一般是行缓冲的,后者一般是全缓冲的。
是这样的,我使用方式是把Process对象" finish() " 作为信号连接到对应槽函数“ readall() ”,那这样如果能触发槽函数,应该是发送“finish()” 信号,那么应该是在进程结束时调用“readall()” 。而且我观察了系统进程,可以明确发现对应脚本在整个Qt程序运行期间有启动与终止。 关于您说得后面那两个概念,我再理解一下,
hahahaha134051 2015-01-19
  • 打赏
  • 举报
回复
引用 1 楼 n7zj0x8 的回复:
你的这句话我很赞同"过程中,照理也应该接收到数据". 程序结束了就没有数据了呗.QProcess还有另一个信号..readyReadStandardOutput ().
我同样也测试过“readyReadStandardOutput ()”信号,当使用此信号时,对应的槽函数没有触发,看起来说明也是对应没有标准输出.
dbzhang800 2015-01-16
  • 打赏
  • 举报
回复
很关键的一点,你没有提,你调用readAll的时候,你的那个脚本运行结束了没? 如果结束了,你仍没有读到数据,这是一个问题。 如果运行中,你没有读到数据,这是另一个问题。 注:对一个控制台程序来说,在控制台下直接运行和通过其他方式运行,其行为并不一定一样。特别是标准输出这个流,前者一般是行缓冲的,后者一般是全缓冲的。
大卫无限 2015-01-16
  • 打赏
  • 举报
回复
你的这句话我很赞同"过程中,照理也应该接收到数据". 程序结束了就没有数据了呗.QProcess还有另一个信号..readyReadStandardOutput ().

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧