以有效的方式将java jar输出传递给python

时间:2017-08-20 05:07:01

标签: java python

我试图通过在python列表中保存结果字符串(java确实System.out.println)来加速我从python调用java jar的方式。它曾经用java写入directl到一个文件,但是我发现每次打开和关闭文件非常慢,所以试图加快速度。

我目前有:

subprocess.call(
            ['java', '-jar', 'TensionTwoSlices.jar', '-runtype', '"groundtruth"', '-inputwindow', inputwindow, '-outputwindow', groundtruth,
             '-inputfile', '"not.txt"', '-key', '"C"'],stdout=subprocess.PIPE, stderr=subprocess.PIPE);

我读了here我可以使用STDOUT,所以我尝试了:

 p = subprocess.Popen(
                ['java', '-jar', 'TensionTwoSlices.jar', '-runtype', '"groundtruth"', '-inputwindow', inputwindow, '-outputwindow', groundtruth,
                 '-inputfile', '"not.txt"', '-key', '"C"'],stdout=subprocess.STDOUT, stderr=subprocess.PIPE);


        print p.STDOUT;

但我得到了:

Traceback (most recent call last):
  File "extract_tension.py", line 65, in <module>
    '-inputfile', '"not.txt"', '-key', '"C"'],stdout=subprocess.STDOUT, stderr=subprocess.PIPE);
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 9] Bad file descriptor

由于我不再写文件,我相信我可以从电话切换到Popen。

但是,由于速度非常重要(运行数百万次),所以没有任何内容写入终端是至关重要的。

将System.out.println从java传递到python列表的最快方法是什么?

1 个答案:

答案 0 :(得分:0)

尝试 -

output = subprocess.check_output(
    ['java', '-jar', 'TensionTwoSlices.jar', '-runtype', 
     '"groundtruth"', '-inputwindow', inputwindow, '-outputwindow', 
     groundtruth, '-inputfile', '"not.txt"', '-key', '"C"'])

print output