2012-08-31 52 views
0

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

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

你可以写入到一个临时文件并传递:当上下文结束

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的位置。

+0

谢谢,我想避免写入文件,以消除任何额外的处理时间。但是,如果我找不到办法,我可能会使用这种方法。顺便说一句我没有意识到这个临时文件函数,所以谢谢你... – t0x13

+0

我会认为一次写入文件所花费的时间是可以忽略的,因为你已经开始对命令进行脱壳。 – jdi

+0

好吧,你可能是对的:) – t0x13

相关问题