1

これが私のコードです

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

基本的に、java-versionの出力をfに格納したいと思います。スクリプトの最初の行が実行された後、javaバージョン情報が出力されますが、fには格納されないため、コードの3行目はまったく実行されません。このコードは、「ls -la」などの他のコマンドでは機能しますが、java-versionでは機能しません。理由について何かアイデアはありますか?

前もって感謝します。

4

2 に答える 2

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'
于 2012-08-15T10:21:19.737 に答える
1

java -versionstdin ではなく stderr に移動するため、リダイレクトする必要があります。

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)
于 2012-08-15T10:30:24.130 に答える