问题的关键在于`process.stdout.read()`是一个阻塞的操作,只有当子进程的输出缓冲区中有数据时才会返回。所以在你的代码中,第一次读取输出后,如果没有再次写入数据,程序会一直阻塞在读取stdout的操作,导致后续的猜数和输出无法进行。
解决这个问题的方法是使用`process.stdout.readline()`来逐行读取输出,而不是一次性读取所有的输出。这样可以确保在每次写入数据后,都能够及时读取并处理相应的输出。
以下是修改后的示例代码:import subprocessimport shlexlow = 1high = 100mid = (low + high) // 2process = subprocess.Popen(shlex.split('python ask.py'), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)while True: print(process.stdout.readline().decode()) process.stdin.write(f'{mid}\n'.encode()) process.stdin.flush() hint = process.stdout.readline().decode() print(hint) if "Too Small" in hint: low = mid + 1 mid = (low + high) // 2 elif "Too Large" in hint: high = mid - 1 mid = (low + high) // 2 else: print(process.stdout.readline().decode()) break print(process.stdout.readline().decode()) process.stdin.write(f'{mid}\n'.encode()) process.stdin.flush()
通过使用`process.stdout.readline()`来逐行读取输出,可以保证在每次写入数据后都能及时读取输出,实现多次猜数和输出的过程。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |