Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用os.popen捕获java版本的输出_Java_Python_Printing_Version_Popen - Fatal编程技术网

无法使用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
,现在它可以工作了。