我正在使用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)
。