我正在尝试包装通常在工作中使用的程序.当调用的参数数量不足或参数拼写错误时,程序会向用户发出提示,要求输入所需的内容.因此,当使用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仍然是默认值.坚果