我正在用Python编写一个与jar文件交互的脚本,jar文件在某些时候可以通过stdin请求用户输入,但是它也可以打印出错误。
为此我正在使用subprocess.Popen
但是我在尝试读取输出和错误输出时遇到困难,必要时写入stdin并再次执行相同操作。
但是当使用Popen.stderr.read()
时它会冻结,因为没有错误要读取,并且当使用Popen.communicate()
来获取输出时,我不能再向进程的STDIN发送更多数据。
我怎么能解决这个问题?这是我的代码:
from subprocess import Popen, PIPE
with Popen (["java","-jar","something.jar"], stdin=PIPE, stdout=PIPE, stderr=PIPE) as process:
# Closes STDIN, unable to communicate back
# stdout, stderr = process.communicate()
# Hangs forever if no STDERR is ever printed
# stdout = process.stdout.read()
# stderr = process.stderr.read()