脚本调用java程序
1. 如何在java程序中调用linux命令或者shell脚本
java程序是提供了这个一方法,Processpro=Runtime.getRuntime().exec(cmds);
但是一般来说,尽量去用一些其他脚本(lua,shell,python)去执行一系列linux命令比较灵活, 而且耗费资源少。但是Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分可观。
java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程。频繁的创建对CPU和内存的消耗很大。
下面是一个调用linux命令的例子:
publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
String[]cmds={"/bin/sh","-c","ps-ef|grepjava"};
Processpro=Runtime.getRuntime().exec(cmds);
pro.waitFor();//阻塞,直到上述命令执行完
InputStreamin=pro.getInputStream();
BufferedReaderread=newBufferedReader(newInputStreamReader(in));
Stringline=null;
while((line=read.readLine())!=null){
System.out.println(line);
}
}
}
注:参数中逗/bin/sh逗 逗-c逗 是可以用shell执行指定的命令的意思
这里/bin/sh -cps -ef|grep java,会执行ps linux命令
2. python代码嵌入java,调用读取文件
如果希望将Python编写的脚本嵌入到Java开发的网站中,可以利用Java的Runtime.getRuntime().exec(commandStr)方法来调用执行cmd指令。例如,用户在Java表单中输入文件名,这些文件名作为参数传递给Python脚本。Python代码片段如下:
在Python端,用户输入文件名如下:
f1 = raw_input("inputfilename")
f2 = raw_input("inputanothername")
img1 = cv.imread(f1)
img2 = cv.imread(f2)
而在Java端,当Java需要调用文件时,它会从用户提交的表单中获取文件名作为参数传给Python脚本。Java代码片段如下:
import sys
f1 = sys.argv[1]
f2 = sys.argv[2]
img1 = cv.imread(f1)
img2 = cv.imread(f2)
调用时,按照脚本名加上空格和参数1、参数2的方式运行即可。
在实际应用中,这种方式可以实现Java与Python之间的交互,特别是在处理文件读取和图像处理等任务时。值得注意的是,这种方式可能会引入安全风险,因此在实际部署时需要进行充分的安全评估。
此外,还可以考虑使用更高级的技术来实现Java与Python的集成,例如使用Jython将Python代码直接嵌入Java程序中,或者使用Java调用Python的库函数。这些方法可以提供更高的集成度和更好的性能。
总之,通过Java调用Python脚本是一种有效的解决方案,它允许开发者利用Python的强大功能来扩展Java应用程序的功能。同时,这种方式也为跨语言开发提供了更多的灵活性。
需要注意的是,当使用这种方式时,应确保正确处理文件路径和权限问题,以避免潜在的安全漏洞。
3. bat脚本如何调用JAVA程序
bat文件内容如下:
cd <arg0>
java <-classpath arg1> <-jar> arg2 <arg3 arg4..>
说明:
<尖括号里的不是必须的,按你的具体情况来>
arg0:你的class或jar文件所在目录
arg1:你需要引入的jar文件,如果你已经在window的classpath里配置过或者不需要,那这句可以去掉
arg2:java类(*.class或*.jar)文件
arg3 arg4..:若干个参数,如没有也可以去掉
前提是你安装了jdk,并配置了环境变量
4. sh脚本如何自动执行java程序,并且该脚本如何被定期调用
各位好我有一个问题,是这样: 环境:有一套管理系统(包括联机和批量),该管理系统白天运行联机系统,晚上运行批量系统。 目的:联机系统运行到晚上,会停掉,这时候通过在unix下的sh脚本调用并且启动批量系统。 sh脚本可以调用java程序,通过java程序就可以启动了批量系统。 andilyliao 写道最简单的方法 你可以用java写一个job 然后每天晚上执行sh mginobili 写道可以在脚本中 实现一个定时功能啊 比如每隔半小时 检查一次当前的时间 如果到了晚上 就停止联机系统,运行批量系统 当然前提是 这个sh脚本要一直保持运行状态 并且其错误处理机制要完善问题补充:哦。你的意思是不是这样啊, 这个sh脚本作为一个定时器,定时调用启动联机系统或者批量系统的程序。 通过while(1)这样一个循环,一直运行不中断,然后sleep一定时间,就调用联机的启动程序,再过一定时间,关闭联机启动批量系统。