从subprocess.call获取字符串?

时间:2013-12-16 00:38:59

标签: python subprocess javac

我有一个程序,它符合目录中的Java文件。我想要做的是创建一个数组,将文件名与其控制台输出相关联。我可以创建数组,但我需要以某种方式获得字符串形式的控制台输出。这就是我现在打印输出的方式:

for fn in directoryContents:
    if fn.rfind(".java") != -1:
        subprocess.check_call(['javac', fn])    
        java_class,ext = os.path.splitext(fn)
        className = fn[0: fn.rfind(".java")]
        cmd = ['java',  className]
        subprocess.call(cmd, shell=False)
        print ("\n")

4 个答案:

答案 0 :(得分:2)

您应该使用subprocess.Popen:

p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE)
somestr = p.stdout.readline()

答案 1 :(得分:2)

要从命令获取输出,您可以使用subprocess.check_output()

import subprocess

console_outputs = {fn: subprocess.check_output(["javac", fn])
                   for fn in directoryContents if fn.endswith('.java')}

答案 2 :(得分:1)

subprocess.call接受一个可选参数stdout(以及stderr),你可以传递一个可写文件对象。你可以传递一个StringIO,然后将输出存储到一个字符串中,或​​者将它写入一个实际的文件,然后在需要时读取它。

答案 3 :(得分:0)

您可以使用subprocess.check_output,它返回命令的输出。