Python - 将数据作为输入流传递给jar文件

时间:2012-08-31 01:16:24

标签: python bash

我有一个jar文件,我可以发送数据进行处理,数据是json格式。 data_path是包含数据的文件的路径。下面的工作很好..但是我拥有的数据不是一个文件,而是一个变量。下面的命令不能用于变量,它会尝试读取作为文件的文件目录路径传递的数据。它会是一个不同的bash命令吗?或者我可以用子进程模块做些什么?谢谢!

import subprocess as sub

cmd = "java -jar %s < %s" % (jar_path, data_path)
# send data in a var
# cmd = "java -jar %s < %s" % (jar_path, data)
proc = sub.Popen(cmd, stdin=sub.PIPE, stdout=sub.PIPE, shell=True)
(out, err) = proc.communicate()

1 个答案:

答案 0 :(得分:1)

您可以将其写入临时文件并传递:

import tempfile

with tempfile.NamedTemporaryFile() as f:
    f.write(data)
    f.flush()
    cmd = "java -jar %s < %s" % (jar_path, f.name)
    ...

当上下文结束时,临时文件将自行删除。

@FedorGogolev删除了针对Popen stdin方法的答案,这些方法并不能满足您的特定需求。但这是一个很好的方法,所以我相信他,并认为我会添加他想要的工作版本......

import tempfile

with tempfile.TemporaryFile() as f:
    f.write(data)
    f.flush()
    f.seek(0)
    cmd = "java -jar %s" % jar_path
    p = subprocess.Popen(cmd, shell=True, stdin=f, stdout=subprocess.PIPE)
    ...

如果您将文件对象作为stdin arg传递,则必须确保首先将其设置为0位置。