Python Popen,如果不包含换行符,有什么方法可以读取stdout?

时间:2018-12-18 04:45:36

标签: python popen

我正在使用Popen读取程序的输出并自动填充数据,但是遇到了问题。

我有一个程序提示用户输出。它是专有产品的许可机制。它会询问诸如Does the current date match XX-YY-ZZZZ?Machine limit?

之类的基本信息

问题在于这些提示不包含换行符,因此尝试使用proc.stdout.read()似乎无效。

当手动执行此应用程序时,我们显然可以读取文本以进行响应,因此,如果我正确理解内容,则表明缓冲区已被刷新。这是正确的吗?

即使应用程序中的提示中没有换行符,我该如何阅读stdout

def license_code(self, code):
    os.chdir(self.sql_dir)
    print('Current directory: {}'.format(os.getcwd()))
    proc = subprocess.Popen(
        shlex.split('bin/dlm -i'),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        stdin=subprocess.PIPE,
        bufsize=0
    )

    # Give it 1 seconds
    _now = datetime.datetime.now()
    _response = b''
    while (datetime.datetime.now() - _now).total_seconds() < 1:
        _len = len(_response)
        print('test')
        _response += proc.stdout.read()
        print(_response)
        if len(_response) != _len:
            _now = datetime.datetime.now()
    print(_response.decode())

包含proc.stdout.read()的行挂起,并且从未到达print(_response)

0 个答案:

没有答案