python subprocess popen获取进程状态_python-是否有一种方法可以从subprocess.Popen实例中读取字符,当它调用的进程尚未发出换行符时?...

我正在尝试包装通常在工作中使用的程序.当调用的参数数量不足或参数拼写错误时,程序会向用户发出提示,要求输入所需的内容.因此,当使用subprocess.Popen调用例程时,如果传递了错误的参数,则例程从不会向stdout或stderr发送任何信息. subprocess.Popen.communicate()和subprocess.Popen.read(1)都在任何信息可用之前都等待换行符.

有没有办法在发出换行符之前从subprocess.Popen.stdout检索信息?如果不是,是否可以使用任何方法来确定子进程是否正在等待输入?

解决方法:

首先尝试:将bufsize参数设置为Popen,并将其设置为0:

subprocess.Popen(args, bufsize=0, ...)

不幸的是,这是否有效还取决于子流程刷新其输出的方式,我想您对此没有太多控制权.

在某些平台上,刷新写入stdout的数据时,实际上将根据基础I / O库是检测交互式终端还是管道来更改.因此,尽管您可能认为数据在那里等待读取(因为这是在终端窗口中运行的方式),但是当您从Python中运行与子进程相同的程序时,实际上可能会对行进行了行缓冲.

补充:我只是意识到bufsize = 0仍然是默认值.坚果

标签:subprocess,newline,popen,python

来源: https://codeday.me/bug/20191102/1994107.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值