使用外部jar和多个参数从python执行java类

使用外部jar和多个参数从python执行java类,java,python,linux,python-3.x,Java,Python,Linux,Python 3.x,我正试图构建脚本来执行java类,通过传递数据样本并从java获得结果。java代码使用外部jar,它已经位于python文件和java文件的相同路径中 我的python脚本: 导入操作系统路径,子流程 从子流程导入标准输出,管道 def编译java(java文件): subprocess.check_调用(['javac','-cp',commons-codec-1.7.jar',java_文件]) def execute_java(java_文件,参数): java_类,ext=os.pat

我正试图构建脚本来执行java类,通过传递数据样本并从java获得结果。java代码使用外部jar,它已经位于python文件和java文件的相同路径中

我的python脚本:

导入操作系统路径,子流程
从子流程导入标准输出,管道
def编译java(java文件):
subprocess.check_调用(['javac','-cp',commons-codec-1.7.jar',java_文件])
def execute_java(java_文件,参数):
java_类,ext=os.path.splitext(java_文件)
cmd=['java','-cp',commons-codec-1.7.jar',java_类]
proc=subprocess.Popen(cmd,stdin=PIPE,stdout=PIPE,stderr=stdout)
stdout,stderr=proc.communicate(args)
打印(标准输出)
编译java('jf.java')
执行java('jf.java',[1,2])
我的java类示例:

import org.apache.commons.codec.binary.Base64;
公共类jf{
公共静态void main(字符串[]args){
System.out.println(args[0]);
}
}
但我在编译时出错了:

b'错误:无法找到或加载主类jf\n'

我认为问题在于将
args
传递给主函数,当主函数为
void
函数时,如何从java返回值?

我认为这段代码应该可以工作:

cmd = ['java', java_class, 'InputString']

您可以通过
-cp
参数指定java的类路径。Java将在给定文件中查找jf类,但找不到:

>java-cp commons-codec-1.7.jar jf-toot
错误:无法找到或加载主类jf
您不需要在这里使用
commons编解码器。您可以直接使用类名:

>javajftoot
嘟嘟
或者,如果您的真实代码需要额外的JAR,请将
添加到您的类路径:

>java-cp commons-codec-1.7.jar;。jf嘟嘟
嘟嘟
在python中:

cmd=['java','-cp',commons-codec-1.7.jar;',java_类]
另外一点:由于您需要传递参数,我不会使用
proc.communicate
,因为它在标准输入端发送数据(您需要在java端使用类似scanner的东西),而只需将
args
附加到
cmd
数组:

cmd=['java','-cp',commons-codec-1.7.jar;',java\u class]+args

我需要传递列表而不是字符串,我尝试在cmd中传递列表甚至字符串,但仍然存在相同的问题请注意,此代码适用于windows。在linux上,类路径元素的分隔符是
。非常感谢,现在它可以工作了,但是关于java给我的输出,我使用system,out.println从java获取输出,但是有没有其他更好的方法来收集java的输出?您基本上是在尝试进行跨进程通信。许多人会调用这个远程过程调用(RPC)。以最简单的方式使用参数、stdin和stdout。对于一次性流程来说,这肯定足够了。对于长时间运行的进程,您可以尝试使用套接字通信,但这实际上更复杂。