2016-10-06 26 views
0

呼叫Python代码创建简单的python声明 my_utils.py如何通过java的参数蟒蛇,从Java

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

我想在Java中值分配给蟒蛇。

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." 
+0

可能的复制http://stackoverflow.com/questions/ 27235286/call-python-code-from-java-by-passing-parameters-and-results – hammerfest

+1

你从流程中获得了输入流,而不是outp ut流是打印语句写入的地方 –

回答

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

python字符串类不提供'isdigit'吗?为什么要尝试投射价值? –

+0

如果您只期望整数,'isdigit()'也可以。但是它会为'float'返回'False'。 – greene

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