21天学Python --- 打卡12:Python执行jar包
- 1. Subprocess
- 1.1 Method
- 1.2 Execure Jar
- 2. Jpype
- 2.1 Install
- 2.2 Execute Simple Jar
- 2.2.1 Java Code
- 2.2.2 Python Code
- 2.3 Execute Maven Jar
- 3. Awakening
1. Subprocess
subprocess 是 Python 2.4 中新增的一个模块
1.1 Method
subprocess.call()
父进程等待子进程完成
import subprocess
a = subprocess.call(['ipconfig','/all'])
print(a)
#执行命令,如果命令结果为0,就正常返回,否则抛异常
getstatusoutput()
接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
import subprocess
a = subprocess.getstatusoutput("whoami")
print(a)
#输出
(0, 'desktop-xxxx\\admin')
getoutput()
接收字符串格式命令,并返回结果
import subprocess
a = subprocess.getoutput("whoami")
print(a)
#输出
desktop-xxxx\admin
check_output()
执行命令,并返回结果,下例结果返回给a。
import subprocess
a = subprocess.check_output(['ipconfig','/all'])
print(a)
Popen()
在一个新的进程中执行一个子程序
import subprocess
a = subprocess.Popen(['ping','-c','1','www.baidu.com'],shell=True)
a.wait()
1.2 Execure Jar
import subprocess
def execute_java_jar( ):
jar_path = "E:\\python_work\\airflow\\xxxxx.jar"
param = ""
execute = "java -jar {} '{}'".format(jar_path,param)
print(execute)
output = subprocess.Popen(execute, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
result = output.stdout.read()
#打印控制台结果,按回车换行切割
allSplit =result.decode().split("/r/n")
for x in allSplit:
print(x)
execute_java_jar()
2. Jpype
- Jpype Introduction: https://github.com/jpype-project/jpype.
2.1 Install
pip install jpype1
2.2 Execute Simple Jar
2.2.1 Java Code
- 简单的java代码
- 打成Jar包,点击"Artifacts" -> 绿色的"+" -> “JAR” -> Empty
输入一个名字
Type选择JAR
Available Elements里双击需要添加到jar包的文件,即可添加到左边的jar包目录下
- 运行程序入口main函数,点击OK。
- 点击菜单中“Build” -> “Build Artifacts”。
2.2.2 Python Code
import jpype
import os
if __name__ == '__main__':
path = 'E:\\python_work\\airflow\execute_jar\\hello.jar'
jar_path = os.path.join(os.path.abspath("."),path)
# 2.获取jvm.dll 的文件路径
jvmPath = jpype.getDefaultJVMPath()
print(jvmPath)
# 启动jvm
jpype.startJVM(jvmPath, "-ea", "-Djava.class.path=%s" % path)
# ②、加载java类(参数是java的长类名)
HelloController = jpype.JClass('com.xxx.HelloController')
hello = HelloController()
hello.main(["abc"])
hello.test()
# ④、关闭jvm:jvm随着python程序的退出而结束
jpype.shutdownJVM()
2.3 Execute Maven Jar
3. Awakening
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。