001 发大招了 神器的效率工具--Java代码转python代码
Posted xlfcjx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了001 发大招了 神器的效率工具--Java代码转python代码相关的知识,希望对你有一定的参考价值。
今天发现一个好玩的工具:可以直接将java转成python?
1、 安装工具(windows 环境下面)?
先下载antlr:?
下载链接如下:
http://www.antlr3.org/download/antlr-3.1.3.tar.gz?
或者到百度云下载:
百度云链接:http://pan.baidu.com/s/1gdgXUM3 密码:2qrx?
? ?
下载成功并解压后,进入antlr-3.1.3 untime目录,输入CMD,在CMD中输入如下指令:
python setup.py install,以安装antlr包,如果报错,进入antlr-3.1.3 untimePython目录下,进行同样的操作
? ?
? ?
? ?
? ?
? ?
2、安装完antlr的工具包后,如上步骤,在相同目录下,即antlr-3.1.3 untimePython下,输入CMD,进入CMD中,输入指令:pip install java2python?,以在线安装java2python包?。如果通过指令的方式没法成功下载安装java2python包的话,也可以去github上下载java2python包,下载成功后,解压到本地,通过本地安装的方式安装java2python包。
java2python包的Github路径如下:
https://github.com/natural/java2python.git
? ?
? ?
安装过程中,遇到"‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件"的问题
解决"‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件"的问题的方法:
参考下面链接解决:https://blog.csdn.net/miss85246/article/details/81069276
解决后,pip命令可以正常使用
? ?
继续使用命令在线安装java2python包
? ?
? ?
遇到安装超时的问题:
? ?
安装超时,按照命令中给出的黄色提示,输入指令:python -m pip install --upgrade pip,以更新pip包
You are using pip version 9.0.1, however version 19.3.1 is available.
? ?
You should consider upgrading via the ‘python -m pip install --upgrade pip‘ command.
? ?
开始更新pip包
开始下载pip包
? ?
最终依然没有更新成功pip包,没法使用pip命令在线安装java2python包。
只好github上下载java2python包:https://github.com/natural/java2python.git,然后进行本地安装。
? ?
本地安装java2python包
参考链接:
pip install *.whl ?????直接在pip install命令后添加whl包的全路径名就能本地安装成功了
下载需要的包,一般为zip、tar.gz等的压缩包,解压后,打开命令行,进入解压目录,使用python setup.py install命令安装。
进入路径
? ?
在上图红色框中输入cmd
之后cmd中输入命令:python setup.py install
开始本地安装java2python包
? ?
本地安装java2python包安装成功
? ?
? ?
2、使用工具?
在Python27Scripts目录下会生成一个j2py文件,它其实是个python文件?
cmd进入该目录下:?
然后将一个已写好的java程序跟踪下面的命令后面(.java 文件在python安装路径:Python27Scripts目录下;如不在这个目录下,请带上具体路径;):?
python j2py your_java_file.java?
如下的java代码:
? ?
? ?
cmd进入上图目录下
? ?
? ?
? ?
输入命令: python j2py+需要转为python文件的Java文件的路径及其文件名和后缀
? ?
本例中为需要转为python文件的Java文件TokenTest.java就在script目录下, 所以无需添加路径,所以本例的指令为
: python j2py TokenTest.java
? ?
执行命令出错,遇到报错,提示编码格式有问题:
File "j2py", line 120, in runTransform
tree = buildAST(source)
File "E:PythonPython27libsite-packagesjava2pythoncompiler\\__init__.py", line 15, in buildAST
lexer = Lexer(StringStream(source))
File "E:PythonPython27libsite-packagesantlr_python_runtime-3.1.3-py2.7.eggantlr3streams.py", line 336, in __init__
self.strdata = unicode(data)
UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe6 in position 1058: ordinal not in range(128)
? ?
? ?
解决办法:找到出错的文件E:PythonPython27libsite-packagesantlr_python_runtime-3.1.3-py2.7.eggantlr3streams.py,
打开文件,添加下面三行代码:
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
参考图:
自己的图:
? ?
保存对streams.py添加代码后的更改;
再次执行命令:python j2py TokenTest.java
? ?
ok,执行成功!!!Java代码已经成功转成Python代码,将代码拷贝出来即可调试使用!
? ?
转换后的Python代码如下:
#!/usr/bin/env python """ generated source for module TokenTest """ from __future__ import print_function # package: com.example.demo class TokenTest(object): ????""" generated source for class TokenTest """ ????@classmethod ????def main(cls, args): ????????""" generated source for method main """ ????????try: ????????????timestamp = str(Date().getTime()) ????????????length = len(timestamp) ????????????integer = Integer.valueOf(timestamp.substring(0, length - 3)) ????????????# =================================================================TEST======================================================================= ????????????testUrl = " https://api-open-test.myspacex.cn/access/token" ????????????# print("测试时间戳:"+integer); ????????????appId = "73e311b7-89cb-b2c3-754f-24aa383bf873" ????????????key = "925985d0dced69adf7741eac7e6a6850" ????????????s2 = genHMAC(appId + "|" + integer, key) ????????????# print("测试签名:"+base64Url(s2)); ????????????testToken = sendGet(testUrl, "id=" + appId + "×tamp=" + integer + "&valid_time=36000&sign=" + base64Url(s2)) ????????????testMap = JSON.parse(testToken) ????????????print("测试token:" + testMap.get("data")) ????????except Exception as e: ????????????#??TODO Auto-generated catch block ????????????e.printStackTrace() ? ? ????@classmethod ????def base64Url(cls, str_): ????????""" generated source for method base64Url """ ????????str_ = str_.replaceAll("\\=", "") ????????str_ = str_.replaceAll("\\+", "-") ????????str_ = str_.replaceAll("\\/", "_") ????????return str_ ? ? ????HMAC_SHA1_ALGORITHM = "HmacSHA1" ? ? ????@classmethod ????def genHMAC(cls, data, key): ????????""" generated source for method genHMAC """ ????????result = None ????????try: ????????????# 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称 ????????????signinKey = SecretKeySpec(key.getBytes(), cls.HMAC_SHA1_ALGORITHM) ????????????# 生成一个指定 Mac 算法 的 Mac 对象 ????????????mac = Mac.getInstance(cls.HMAC_SHA1_ALGORITHM) ????????????# 用给定密钥初始化 Mac 对象 ????????????mac.init(signinKey) ????????????# 完成 Mac 操作 ????????????rawHmac = mac.doFinal(data.getBytes()) ????????????result = Base64.encodeBase64(rawHmac) ????????except NoSuchAlgorithmException as e: ????????????System.err.println(e.getMessage()) ????????except InvalidKeyException as e: ????????????System.err.println(e.getMessage()) ????????if None != result: ????????????return str(result) ????????else: ????????????return None ? ? if __name__ == ‘__main__‘: ????import sys ????TokenTest.main(sys.argv) |
? ?
? ?
参考链接:
https://www.cnblogs.com/ceo-python/p/11601811.html
? ?
https://jingyan.baidu.com/article/3c343ff7fb279a0d377963a0.html
以上是关于001 发大招了 神器的效率工具--Java代码转python代码的主要内容,如果未能解决你的问题,请参考以下文章