如何将java参数传递给python,从Java调用Python代码

时间:2016-10-06 06:38:52

标签: java python parameter-passing processbuilder

我创建了简单的python语句 my_utils.py

def adder(a, b):
    c=a+b
    return c

我想在Java中为python赋值。

public class ParameterPy {
public static void main(String a[]){
try{

int number1 = 100;
int number2 = 200;

ProcessBuilder pb = new ProcessBuilder("C:/Python27/python","D://my_utils.py",""+number1,""+number2);
Process p = pb.start();

BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

System.out.println(".........start   process.........");  
String line = "";     
while ((line = bfr.readLine()) != null){
    System.out.println("Python Output: " + line);
}
System.out.println("........end   process.......");


}catch(Exception e){System.out.println(e);}
}
}

但是,进程构建器无法将参数值传递给python中的a,b并显示结果。 enter image description here

如何将参数值赋给python?如果数值有效?如果我将非数字值(如字符串)传递给python

,怎么样?
def str(myWord):
    if myWord=="OK":
        print "the word is OK."
    else:
        print " the word is not OK."

2 个答案:

答案 0 :(得分:1)

Python sys模块通过sys.argv提供对任何命令行参数的访问。但是参数的类型总是字符串。以下是我想要检查数值的示例:

import sys

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

def adder(a, b):
    c=a+b
    return c

def is_number(x):
    try:
        float(x)
        return True
    except ValueError:
        return False

p1 = sys.argv[1]
p2 = sys.argv[2]

if is_number(p1) and is_number(p2):
    print "Sum: {}".format(adder(float(p1), float(p2)))
else:
    print "Concatenation: {}".format(adder(p1, p2))

更新:如上所述@ cricket_007,如果只想检查整数,可以使用isdigit。但它不适用于float

>>> "123".isdigit()
True
>>> "12.3".isdigit()
False

答案 1 :(得分:0)

import sys
# print sys.argv

print "sys.argv is:",sys.argv
# ['D://my_utils.py', '100', '200', 'google']

a= sys.argv[1]
b= sys.argv[2]
print "a is:", a
print "b is:", b
a= int (a)
b= int(b)

def adder(a, b):
    c=a+b
    return c

print adder(a,b)

searchTerm=sys.argv[3]
print searchTerm  ##google

def word(searchTerm):
    if searchTerm=="google":
        print " you get it"
    else:
        print " the word is different."

word(searchTerm)

在java中

int number1 = 100;
int number2 = 200;
String searchTerm="google";
ProcessBuilder pb = new ProcessBuilder("C:/Python27/python","D://searchTestJava//my_utils.py",""+number1,""+number2,""+searchTerm);
Process p = pb.start();

BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

System.out.println(".........start   process.........");  
String line = "";     
while ((line = bfr.readLine()) != null){
    System.out.println("Python Output: " + line);

输出结果:

Python Output: a is: 100
Python Output: b is: 200
Python Output: 300
Python Output: google
Python Output:  you get it