【问题标题】:Cannot capture output of java -version using os.popen无法使用 os.popen 捕获 java -version 的输出
【发布时间】:2012-08-15 10:18:56
【问题描述】:

这是我的代码

    f = os.popen("java -version")
    for i in f.readlines():
        print "result, ", i,

基本上我希望将 java -version 的输出存储在 f 中。发生的情况是,在脚本的第一行执行后,java -version 信息被打印出来,但没有存储在 f 中,因此根本没有执行第三行代码。此代码适用于其他命令,例如“ls -la”,但不适用于 java -version。关于为什么的任何想法?

提前致谢。

【问题讨论】:

  • java -version 输出到标准错误
  • 不知道。感谢您的信息:)

标签: java python printing version popen


【解决方案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)

【讨论】:

    【解决方案2】:

    尝试类似:

    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'
    

    【讨论】:

    • @user1410747 我的错误应该是stderr=PIPE,现在它可以工作了。
    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多