无法使用os.popen捕获java版本的输出
这是我的密码无法使用os.popen捕获java版本的输出,java,python,printing,version,popen,Java,Python,Printing,Version,Popen,这是我的密码 f = os.popen("java -version") for i in f.readlines(): print "result, ", i, 基本上,我希望java-version的输出存储在f中。发生的事情是,在脚本的第一行执行之后,java版本信息被打印出来,但没有存储在f中,因此第三行代码根本没有执行。此代码适用于其他命令,如“ls-la”,但不适用于java版本。你知道为什么吗 提前谢谢。试试以下方法: from subproces
f = os.popen("java -version")
for i in f.readlines():
print "result, ", i,
基本上,我希望java-version的输出存储在f中。发生的事情是,在脚本的第一行执行之后,java版本信息被打印出来,但没有存储在f中,因此第三行代码根本没有执行。此代码适用于其他命令,如“ls-la”,但不适用于java版本。你知道为什么吗
提前谢谢。试试以下方法:
from subprocess import Popen, PIPE
stdout,stderr= Popen(['java','-version'], shell=False, stderr=PIPE).communicate()
print(stderr)
输出:
b'java version "1.6.0_20"\nOpenJDK Runtime Environment (IcedTea6 1.9.13) (6b20-1.9.13-0ubuntu1~10.10.1)\nOpenJDK Client VM (build 19.0-b09, mixed mode, sharing)\n'
由于
java-version
转到stderr,而不是stdin,因此必须重定向它:
f = os.popen("java -version 2>&1")
for i in f.readlines():
print "result, ", i,
更好的方法是使用模块,该模块旨在简化此类工作:
print subprocess.check_output("java -version", stderr=subprocess.STDOUT, shell=True)
java-version的输出将被发送到STDERDIN,我不知道这一点。谢谢你提供的信息:)@user1410747我的错误应该是
stderr=PIPE
,现在它可以工作了。