1

サブプロセスモジュールを使用してサブプロセス(Javaプログラム)を開始し、その出力ストリーム(stdout)に接続しています。しかし、私がそのstdoutを取得しようとすると、出力がありません。

p= subprocess.Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/', shell=True, stdout=subprocess.PIPE, bufsize= 4024)

        out, err = p.communicate()
        print out

stdoutでもノンブロッキング読み取りを実行できるようにしたいと思います。どうすれば両方のことができますか?

4

2 に答える 2

2

最初の引数を引数のリストに分割する必要があります。出力が得られない理由は、シェルが「java -Xmx256m -jarbin/HelloWorld.jar」という名前のファイルを実行しようとしているためだと思います。このファイルは明らかに存在しません。["java", "-Xmx256m", "-jar", "bin/HelloWorld.jar"]代わりに、次のように最初の引数として使用します。

cmd = ["java", "-Xmx256m", "-jar", "bin/HelloWorld.jar"]
cwd = r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/'
p = subprocess.Popen(cmd, cwd=cwd, shell=True, stdout=subprocess.PIPE, bufsize=4024 )

out, err = p.communicate()
print out

Re:stdoutで非ブロッキング読み取りを実行したい場合は、この他の回答を参照してください。

于 2012-11-29T19:44:39.480 に答える
0

これは私にとってはうまくいきました。HelloWorldはSystem.out.println("Hello World!");

import subprocess

p= subprocess.Popen(["java","-jar","HelloWorld.jar"], shell=True, stdout=subprocess.PIPE, bufsize= 4024)

out, err = p.communicate()
print out

この回答は、サブプロセスからのノンブロッキングの読み取りをすでにカバーしています: python:ノンブロッキングサブプロセス、stdoutを確認してください

于 2012-11-29T19:38:07.370 に答える