【问题标题】:Subprocess: not output子进程:不输出
【发布时间】:2012-11-17 22:45:25
【问题描述】:

我正在使用 subprocess 模块来启动一个子进程(java 程序)并连接到它的输出流(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

我也希望能够在其标准输出上执行非阻塞读取。 我怎么能做这两件事?

【问题讨论】:

    标签: java python subprocess ipc stdout


    【解决方案1】:

    您需要将第一个 arg 拆分为您的 args 列表;我认为你没有得到输出的原因是你的 shell 正在寻找一个名为“java -Xmx256m -jar bin/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:想要在标准输出上执行非阻塞读取,请参阅other answer。

    【讨论】:

    • "java -Xmx256m -jar bin/HelloWorld.jar" 是我希望我的 shell 运行的命令......当我在我的 shell 上执行它时,它会成功运行!
    • 我明白 - 但这是一个完整的命令字符串,而不是您的命令试图执行的 文件名。
    【解决方案2】:

    这对我很有用,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: nonblocking subprocess, check stdout

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2014-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      相关资源
      最近更新 更多