这是我的代码
f = os.popen("java -version")
for i in f.readlines():
print "result, ", i,
基本上我希望java -version的输出存储在f中。发生的情况是,在脚本执行第一行之后,打印出java -version信息,但不存储在f中,因此根本不执行第三行代码。此代码适用于其他命令,例如“ls -la”,但不适用于java -version。关于为什么的任何想法?
提前致谢。
答案 0 :(得分:1)
尝试类似:
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'
答案 1 :(得分:1)
由于java -version
转到stderr,而不是stdin,你必须重定向它:
f = os.popen("java -version 2>&1")
for i in f.readlines():
print "result, ", i,
更好的是,使用subprocess模块,该模块旨在简化这类工作:
print subprocess.check_output("java -version", stderr=subprocess.STDOUT, shell=True)