我正在尝试使用python调用java jar程序,当我将输入参数作为字符串传递时,它正常工作。现在我需要将字典作为输入参数传递。
以下是代码:
的Python:
class ExecuteKTR():
def GET(self,r):
web.header('Access-Control-Allow-Origin','*')
web.header('Access-Control-Allow-Credentials', 'true')
secToken = web.input().SecurityToken
Domain = web.input().Domain
fieldnames = ast.literal_eval(web.input().fieldnames)
authResult = Auth.GetSession(secToken,Domain)
if authResult.reason == "OK":
args = ['ktrjob.jar', 'arg1', 'arg2', 'argN'] # Any number of args to be passed to the jar file
result = jarWrapper(*args)
print result
elif authResult.reason == 'Unauthorized':
result = comm.format_response(False,authResult.reason,"Check the custom message",exception=None)
return result
def jarWrapper(*args):
process = Popen(['java', '-jar']+list(args), stdout=PIPE, stderr=PIPE)
ret = []
while process.poll() is None:
line = process.stdout.readline()
print line
if line != '' and line.endswith('\n'):
ret.append(line[:-1])
stdout, stderr = process.communicate()
ret += stdout.split('\n')
if stderr != '':
ret += stderr.split('\n')
ret.remove('')
return ret
爪哇:
String file = "";
if(args.length != 0)
{
file = args[0];
for ( int i=0;i<=args.length;i++)
{
System.out.print(args[i]);
}
}
我需要将字典作为参数传递给java应用程序。样本一是,
{DateTime:12/03/2016,DealerName:'Test'}
答案 0 :(得分:3)
Java只允许字符串数组作为程序的输入参数,因为Java中main方法的签名显示:
public class MainClass {
public static void main(final String[] args)
{
//do stuff
}
}
您需要将字典转换为一个(或多个)字符串以用于java程序的输入,并解码Java程序中的传输字符串。一种解决方案是将您的字典编写为JSON字符串,并从Java程序中提供的String中解析JSON对象。
要在python中创建JSON字符串,您可以使用
strJSON = json.dumps(myDict)
在Java中,有几个库可以从Json格式导入have a look here。
答案 1 :(得分:1)
你可以使用JSON将字典作为字符串传递,因为在Python字典中和JSON基本相同
答案 2 :(得分:0)
将字典传递给程序是没有意义的:所有可以传递给子进程的都是字符串。
所以你必须选择一个约定。如果您需要能够传递任意对象,则JSON是一个选项,因为库存在于两种语言中。如果字典非常简单并且结构总是相同,那么您也可以只传递变量部分。但要注意,JSON没有指定任何日期格式,因此您必须选择自己的日期格式,并在Python和Java端保持一致。