如何用Java类中的参数调用Python脚本

2024-04-24 13:47:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python 3.4。

我有一个Python脚本myscript.py

import sys
def returnvalue(str) :
    if str == "hi" :
        return "yes"
    else :
        return "no"
print("calling python function with parameters:")
print(sys.argv[1])
str = sys.argv[1]
res = returnvalue(str)
target = open("file.txt", 'w')
target.write(res)
target.close()

我需要从java类中调用这个python脚本PythonJava.java

public class PythonJava 
{
    String arg1;
    public void setArg1(String arg1) {
        this.arg1 = arg1;
    }
public void runPython() 
    { //need to call myscript.py and also pass arg1 as its arguments.
      //and also myscript.py path is in C:\Demo\myscript.py
}

我正在从另一个Java类调用runPython(),方法是创建PythonJava的对象

obj.setArg1("hi");
...
obj.runPython();

我试过很多方法,但都不管用。我使用了Jython和ProcessBuilder,但脚本没有写入file.txt。你能建议一种适当的方法来实现这个目标吗?


Tags: 方法py脚本targetreturnsyspublichi
1条回答
网友
1楼 · 发布于 2024-04-24 13:47:21

你看过这些吗?他们提出了不同的做法:

Call Python code from Java by passing parameters and results

How to call a python method from a java class?

简而言之,一种解决方案可以是:

public void runPython() 
{ //need to call myscript.py and also pass arg1 as its arguments.
  //and also myscript.py path is in C:\Demo\myscript.py

    String[] cmd = {
      "python",
      "C:/Demo/myscript.py",
      this.arg1,
    };
    Runtime.getRuntime().exec(cmd);
}

编辑:只要确保将变量名从str改为cdarke指出的其他名称

您的python代码(将str更改为其他内容,例如arg并指定文件的路径):

def returnvalue(arg) :
    if arg == "hi" :
        return "yes"
    return "no"
print("calling python function with parameters:")
print(sys.argv[1])
arg = sys.argv[1]
res = returnvalue(arg)
print(res)
with open("C:/path/to/where/you/want/file.txt", 'w') as target:  # specify path or else it will be created where you run your java code
    target.write(res)

相关问题 更多 >