python readfile 管道_使用win32的正确方法是什么文件.ReadFile从管道中获取输出?

我正在使用pywin32扩展来访问Python下的win32api。我是用Python编写Windows编程的新手——我是一个POSIX的人——所以我可能是在用一种头脑简单的方式做事。在

我试图正确地使用win32file.ReadFile函数,在解释可能的结果代码时遇到了一些问题。在

我这样调用函数:result, data = win32file.ReadFile(child_stdout_r, 4096, None)

我正在读取我启动的子进程的输出。我得到了很好的数据,但我担心管道中的数据可能多于4096个字符。(我宁愿正确地执行此操作,而不是选择任意大的缓冲区大小。)

如果要读取的字符数超过4096个,则需要运行win32文件.ReadFile好几次直到我把管子排气。为了确定是否需要多次运行ReadFile,我需要解释结果代码。在The result is a tuple of (hr, string/PyOVERLAPPEDReadBuffer), where hr may be 0, ERROR_MORE_DATA or ERROR_IO_PENDING.

因为我在函数调用中将overlapped值设置为None,所以我不需要担心任何PyOVERLAPPEDReadBuffer的东西。(既然我得到了有效的数据,我想我是对的。)

我对hr结果变量有两个问题:我在任何地方都找不到ERROR_MORE_DATA或ERROR_IO_PENDING常量的值。在

ActiveState文档似乎暗示0表示成功,常量(无论是什么)表示失败。Microsoft docs状态,0表示失败,非零表示成功,您需要运行GetLastError来了解更多信息。在

正确的方法是什么?在

编辑后添加:我没有使用子流程,因为我需要将子流程添加到我创建的作业对象中。目标是使所有子进程在父进程死亡时立即死亡。通过将子进程添加到job对象,子进程将在job对象的最后一个句柄关闭时终止。当父对象退出时,由父对象持有的句柄将关闭。据我所知,所有这些都使我无法使用子流程。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值