生活
Jython 、python语言
2023-04-16 00:44  浏览:43

“Jython”和“Python”的关系是什么?

(1)我们通常意义上说的python是CPython,也就是完全用C实现的python,它支持C的扩展,不支持java什么的扩展。

(2)JPython是完全用JPython实现的python,它支持用java扩展,貌似无法用C扩展。

(3)这两个东东如果不讨论什么特殊的模块的话,当然用法相同,打个比方,现在用一个项目,让你用Fortran来实现python,那你也会尽可能的保持其语法上与另外两个主流的interpret一致。

(4)这两个东东,当然有区别,例如CPython就没有JPython的垃圾回收机制

(5)python还有其他的实现,例如有用.NET实现的.......全是C#

--------------------------------------------------------------------------

(6)至于你说谁的扩展好,我感觉这个很难说,要依据你要写什么类型的工程来定

(7)python挺不错的,现在NASA火星上的那个“好奇号”的程序都是用java编写的,可能下一个就是python啦!!!!

jython和python的区别是什么

我们通常意义上说的python是cpython,也就是完全用C实现的python,它支持C的扩展,不支持java什么的扩展。

jython是完全用jython实现的python,它支持用java扩展,貌似无法用C扩展。

相关推荐:《python培训视频》

jython用途比较少。主要在两个场景下:

1、操作系统不提供cpython, 只有JAVA可以用。比如sun工作站,或者是某些嵌入式设备。

2、不得不用一些JAVA的包来提供功能。所以只能用jython来调用JAR包。

jython因为有java的即时编译器和编译优化效果,所有速度还是不错的。

不过jython的总体来讲,支持包不够多。不象是cpython 2.7那样,几乎所有的包都支持。极其丰富。不过纯python的包都可以在jython上安装使用。

jython的版本号通常比cpython的要低。不过现在到了2.7也基本上持平了。流行的jython就是2.5,2.7两个版本。

另外jython似乎对于GIL处理的更好些。所以原则上讲,并发性能更好。所以jython的线程应该会比cpython的线程更强大。可以更好的利用到java的性能,把CPU的各个核都用上。

另外内存的使用上,按理jython也可以利用到java的一些优点。cpython通常字典超 过2GB内存就会很慢。也许jython要好些。

总体来讲,性能上还是cpython要更快些。最快的是pypy,其次是cython, 再次是cpython, jython应该在后面。

python是什么语言

分类: 电脑/网络 程序设计 其他编程语言

问题描述:

他的中文是什么,他有什么特点

解析:

Python是什么?

Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度。它可以用来开发各种程序,从简单的脚本任务到复杂的、面向对象的应用程序都有大显身手的地方。Python还被当作一种入门程序员最适合掌握的优秀语言,因为它免费、面向对象、扩展性强同时执行严格的编码标准。

Python是免费的

Guido van Rossum于1990年开始开发Python,最初的目的无非是一个自娱的项目。作为Monty Python的飞行马戏团节目的爱好者,他给自己开发的这种编程语言起了现在这个古怪的名字,中文意思就是大蟒。Python最初设计为一种取代 Amoeba分布式操作系统ABC的脚本语言,但不久这种新型编程语言很快就发展成可以解决相当多问题的利器,现在更引入到了多种平台。

Guido目前还是Python软件基金会的主席。该组织按照GNU公共许可协议的要求拥有Python的知识产权和许可权。Python可以用在多种平台上,包括Windows、Macintosh和各种常见的UNIX系统。另外针对PalmOS 和微软的Pocket PC的相应版本也在开发中。

Python品质超群

虽然Python常用来创建简单的脚本,但它采用的编程技术可不简单,比如面向对象编码、套接字、线程和GUI等等。假如你是一位刚入流的程序员,这些特性显然对你太有帮助了,因为你可以很快熟悉有益的编程语法和编码实践,之后再学习其他语言,比如Java或者C++等引入的技术概念就容易多了。脚本可以单独执行,不过,你还可以通过类文件和各类对象类型以充分利用这种语言的强大功能。

Python区别于其他面向对象语言的关键有两点。首先,Python强调空格和编码结构,从而令开发者的代码具有良好的重用性。其次,执行脚本之前无须编译Python代码,这就是它为什么被当作脚本语言的原因。

Python易于扩展

Python语言有一个引人注目的优势,它可以针对语言无法完成功能的函数调用函数库。Python还具有有些相当有用的工具帮助开发出复杂的应用程序。其中最常用的就是Tkinker,这种工具可以实现跨平台的GUI开发。另一种wxPython工具则是对wxWindows跨平台C++框架的扩展。WxPython目前已经支持Windows和Linux平台。Python Imaging Library可以让Python创建、打开、编辑和修改图象,包括.gif、.jpeg和.png等。为了了解常用的Python扩展和应用,你不妨访问下The V***lts of Parnassus。

Python自身还可以嵌入到其他编程语言中。最常见的就是jython/]Jython,这是一种用Java编写的Python解释器。这样你就可以同时利用两种语言的优点。你还可以在强大的Java应用程序框架中结合Python清晰的语法来创建出依赖于两种语言库的应用程序。

编码标准

严格的Python语法是初级程序员忽略这一强大编程语言的最主要原因。和大多数的其他面向Web脚本语言不同的是,Python的空白排版不依赖于括号或者分号来表示语句结束,换行和占位符用来描述代码的可视结果。这种编程方式乍看之下令人感到厌烦,但却对你另有莫大的好处,这就是代码的可靠性。Python这种结构化是建立在下面的理论之上:开发者的工作时间是机构财产中最有价值的财富。一旦你习惯了编写Python代码的规则。实际上你就习惯了一种内建的编码标准。这也正是大多数Python开发者所依赖的标准。

获取Python

你可以从[url=python]python或者各类平台上的Python版本。ActiveState网站也发布用于 Windows、Linux和Solaris等平台的Python库。

最简单的Python代码

下面我们举例说明Python。假设你目前使用的是Windows系统,而且已经安装了Python,请首先启动IDLE,也就是Python的GUI。现在处于Python Shell中(如果你在UNIX类型的系统上就需要键入 python类型指示你的Python可执行文件)。接着在""提示符下键入:

print "Hello World"

这个大家耳熟能详的程序就在屏幕上显示出结果,你还可以如下所示给变量赋值:

myvar = 42

print myvar

在上例中会显示结果42。

如果你开发的脚本无须在Python Shell 中直接输入Python就更有用了。程序清单A就包含了一个Hello World脚本的示例,其中编写了if-else语句。

你可以在命令行上键入scriptname.py来执行自己的脚本(py是Python 脚本的标准文件扩展名)。你应该能看到正确的显示结果。清单A中,跟着if和else之后由占位符缩排的语句就是空白格式化的一部分。

这些很简单的示例演示了Python清晰的语法。为了了解更多有关Python编程的信息,你不妨查看下Python网站上的初学者指南。如果你不习惯于上网浏览,那么你还可以阅读O'Reilly 和New Riders 出版的有关图书。比如How to Think Like a Computer Scientist : Learning with Python和Python Essential Reference。

小结

不论你是一位初学编程语言以图增长自己知识技能的入门程序员还是为了谋取更大代码可靠性的Perl高手,你都会发现Python是一种相当灵活和强大的编程语言。它可以开发出各种各样的应用程序,从功能齐备的邮件列表软件到各种跨平台的GUI应用程序一应俱全。

上面用到的清单 A [re: xyb]

# List A

# (If you are on an UNIX type system you m*** have to modify the first line to point to

your Python executable.)

#!/usr/bin/pythonmyvar = "Hello World"if myvar == "Hello World": print myvarelse: print "myvar does not equal Hello World"

[精华] 另外,我也介绍一本书 [re: xyb]

(enthusiast)

02-09-02 11:21

Bruce Eckel的Thinking in Python,可以从这里下载。

Bruce Eckel已经出版的Thinking in Java和Thinking in C++可都是鼎鼎大名。他正在写的有Thinking in Python和Thinking in Pattern,不知道什么时候可以出版。

其他Bruce Eckel的著作下载目录:Bruce Eckel's Free Electronic Books

文章选项:

打造自己的渗透测试框架—溯光

TrackR***简介

溯光,英文名“TrackR***”,意为逆光而行,追溯光源。同时致敬安全圈前辈开发的“溯雪”,“流光”。

溯光是一个开源的插件化渗透测试框架,框架自身实现了漏洞扫描功能,集成了知名安全工具:metasploit、Nmap、Sqlmap、AWVS等。

溯光使用 Java 编写,SpringBoot 作为基础框架,JPA + HSQLDB嵌入式数据库做持久化,Maven 管理依赖,Jython 实现 Python 插件调用,quartz 做任务调度,freemarker + thymeleaf 做视图层,Websocket 实现命令行式插件交互。

框架可扩展性高,支持 Java、Python、JSON 等方式编写插件,有“漏洞扫描插件”、“爬虫插件”、“MVC插件”、“内部插件”、“无交互插件”和“可交互插件” 等插件类型。

功能展示

主页

登录

任务创建

任务列表

任务详情

无交互接口插件调用

MVC插件示例

交互式插件控制台

MSF 控制台

依赖环境

JDK 1.8

Python 2.7

Maven

Git

metasploit

Nmap(建议安装)

SQLMAP(建议安装)

AWVS

**加粗为必须环境,没有安装程序则无法正常编译运行

不论是 Windows 还是 linux 一定需要先安装 JDK1.8 和 Maven。安装过程这里不做演示。保证 JDK 和 Maven 都在系统环境变量,能执行java -version 和 mvn --version即可。

安装过程

***步

手动启动 AWVS 服务

登录后台,生成一个API密匙。

复制密匙和 AWVS 的地址。

找到web/src/main/resources/application.properties配置文件。

修改如下部分

第二步

找到你 python 的第三方库目录。

Windows 的一般在 python 安装目录下的/Lib/site-packages

Linux 下可以通过输出 sys.path 来找第三方包路径

我的是 D:/Python2/Lib/site-packages

同样找到web/src/main/resources/application.properties配置文件。

修改python.package.path参数

第三步

安装 Maven 后找到仓库位置。

如果没有在 settings.xml 里配置指定仓库目录,默认会在当前用户目录中生成一个 .m2的目录

找到仓库目录后修改 application.properties 的 maven.repository.path参数

第四步

这个是 DNSLOG 回显检测漏洞时需要的。

去 ceye.io 注册一个账号,拿到给你分配的域名和 TOKEN。

修改配置文件

第五步

启动 msf 和 sqlmapapi。

如果你是 kali 操作系统,可以直接运行startdep.sh。

如果是其他系统,则要找到 metasploit 和 sqlmap 的目录分别执行

启动成功后修改配置文件

第六步

编译打包程序

等待依赖下载完成和编译完成,如果以上操作都没有出现问题则会提示 BUILD SUCCESS

编译成功后会在当前目录打包一个trackr***.jar就是溯光的主程序。

然后直接执行startup.bat或startup.sh溯光就会启动服务。

没有抛出异常或ERROR日志,访问 8080 端口正常。

服务启动正常后,登录 iZone 社区账号。

**开发插件建议使用 Intellij IDEA IDE,需要安装 lombok 插件。

目录结构

插件

AbstractPlugin

这是交互式插件和非交互式插件的父类。

base常量

其中的静态常量 base 是 /resources/include/ 的所在目录。

如果你的插件需要额外的静态资源,那么你可以在 /resources/include 目录里创建一个和插件 KEY 相同的文件夹,便于识别,如果没有在 @Plugin 注解中设置 value 则默认的插件 KEY 就是当前类名首字母小写。

如 Typecho001 = typecho001

check(Map param)

这是用于检验是否合规的方法,需要被强制重写,当返回 true 时才会调用 start() 方法

param 参数是从前台传过来的参数键值对。

常被用于检验参数格式是否正确或漏洞是否存在。

after()

在 start() 方法之前调用

before()

在 start() 方法之后调用

start()

这是一个抽象方法,所有继承了该类的子类都需要重写这个方法。

在 check 方法 通过后会调用 start() 方法

start() 方法返回值最终会会当做插件结果,响应给前台。

shell()

调用当前系统 shell 来辅助完成插件功能。

executor()

插件执行的主方法

crawlerPage

http请求对象(不推荐使用)

fetcher

执行 http 请求对象(不推荐使用)

errorMsg

当校验不通过时,返回给前台的信息。

param

前台传过来的参数键值对

requests

HTTP 发包工具(推荐使用)

hackKit

hack 常用工具包

无交互插件

无交互插件需要你填写好所有要填写的参数,直接请求接口来执行插件。

默认需要去继承 CommonPlugin类。

这是一个抽象类,继承了 AbstractPlugin

主要多出来两个属性:request 和 response。

继承了 CommonPlugin 的类可以通过调用这两个属性来控制请求和响应内容。

无交互插件同时也需要使用 @Rule 和 @Plugin 插件,这两个注解后面会讲到。

在 ,找到相应的插件填写好参数提交即可完成调用。

或直接调用接口。

交互式插件

交互式插件一般在命令行控制台中调用,可以允许你通过命令行交互来完成插件的调用。

交互式插件由 Websocket 实现,想要写一个交互式插件,首先要继承 WebSocketPlugin 类。

同时设置 @Rule 注解的 websocket 参数为 true ,如果需要异步交互需要将 sync 也设置为 true。

内部插件

内部插件是不可以通过外部去调用的,需要继承 InnerPlugin 并使用 @Plugin 注解,通常在漏洞扫描时时会调用。

例如 “网页爬虫”,“指纹识别”,“端口扫描” 等,都是通过调用内部插件实现的。

还有用于检测 SSRF 等漏洞用的 FuckCeye 插件也属于内部插件。

通过 spring 的自动注入,来注入内部插件到当前对象。

例子可参考 WebLogicWLSRCE.java

爬虫插件

爬虫插件会在扫描任务被勾选“网页爬虫”时调用,每爬取一条请求就会调用一次爬虫插件。

爬虫插件需要继承 CrawlerPlugin,继承该类必须重写 check 和 process 方法。

check 方法用于检验请求是否符合插件规则,以免产生多余请求。

当 check 方法 返回为 true 时会调用 process 方法。

process 方法里写插件主要检测代码。

addVulnerable()

当插件检测出漏洞时,可以通过调用 addVulnerable() 方法来向数据库插入一条漏洞。

requests

requests 属性为请求工具包,处理 https 和 http 都很方便。

response

response 属性为当前爬虫得到的 HTTP 响应。

task

task 属性为当前任务对象,如果你的爬虫插件不是检测漏洞而希望是检测一些敏感信息的话可以修改 task.getResult() 里的属性。

参考 FingerProbe.java 或 InfoProbe.java。

target

爬虫爬取到的 URL 对象。

fetcher crawlerPage

http 请求对象(不建议使用)。

漏洞扫描插件

漏洞扫描插件会在,扫描任务中勾选“漏洞攻击模块”时调用。

漏洞扫描插件分为三种

1.独立插件

独立的漏洞扫描插件需要继承 AbstractExploit 并使用 @Plugin 或 @Exploit

AbstractExploit 中有以下需要了解的方法和属性。

requests

http / https 发包工具

target 当前扫描任务的地址。

task

当前扫描任务对象。

check()

check 是一个抽象方法,需要被子类强制重写。

该方法一般用于检验是否符合当前漏洞扫描插件的规则,以免产生多与请求。

attack()

attack 也是一个抽象方法,需要被子类强制重写。

该方法是检测漏洞的主方法。

before()

在 attack 方法前执行

after()

在 attack 方法后执行

addVulnerable()

当插件检测出漏洞时,可以通过调用 addVulnerable() 方法来向数据库插入一条漏洞。

fetcher crawlerPage

http 请求对象(不建议使用)。

2.漏洞规则

位于

实际上这是一个“内部插件”,会在勾选漏洞模块攻击时调用。

有一些漏洞检测方法很简单,只通过简单的判断响应体就能识别出来,也就没有必要再去写一个独立的插件而占用空间了。

在 doSwitch() 方法中会先去根据当前任务的指纹识别结果走一遍 switch 流程。

swtich 的每一个 case 都是 WEB 指纹的枚举对象。

当 switch 找到当前任务 WEB 指纹对应的 case 后,case 内的代码会通过构建一个漏洞规则添加到 loaders 集合里。

如果规则是通用的,可以写在 switch 的外面。

3.kunpeng JSON插件

kunpeng 是一个 go 语言编写的 poc 测试框架,这里我对 kunpeng 的 JSON 插件做了一个支持。

只需要按照 kunpeng json 插件的格式规范创建一个 json 文件到 /resources/json 目录。

在扫描任务勾选“漏洞攻击模块”时会被调用,或通过 MVC 插件调用 。

MVC 插件

位于

MVC 插件的特点在于,他可以像是在写一个功能一样,而非简单的接口式调用。

MVC 插件需要继承 MVCPlugin 类,并使用 @Rule,@Plugin 注解。

MVCPlugin 内置了一个 ModelAndView 对象, 是 SpringMVC 提供的。

可以通过 setViewName() 来指定视图层的网页模板。

通过 addObject(key,value) 向视图层网页模板注入参数。

这里的视图层是使用 thymeleaf 实现的,需要懂 thymeleaf 的语法。

例子可以参考:com.trackr***.module.inner.JSONPlugin

继承 MVCPlugin 必须要重写一个 index 方法,这是插件的入口。

如果需要写其他的功能,就得再创建一个 public 返回值为 void 的无参方法。

并且要在该方法上使用 @Function 注解,该注解的 value 参数如果不填写的话则默认的 requestMapping 地址为方法名。

例如

最后还需要在 /module/src/main/resources/templates 创建一个目录名为插件 KEY 的目录。

里面存放扩展名为 .html 的模板文件。

Python 插件

python 插件有两种实现方式。

1.通过命令行实现

这种方式最为简单,通过在 include 里写一个 python 脚本。

然后在插件里调用 shell() 方法来执行系统命令。

案例可参考 com.trackr***.module.plugin.windows.***b.MS17010

但这样还需要再写 java 的代码,对于没有学过 java 的人来说很不友好。

2.通过jython实现

jython 是一个 Python 语言在 Java 中的完全实现。

我将它的调用过程写成了一个交互式插件。

你可以通过在 /resources/python/ 目录下安装如下规范去创建一个 python 文件。

在这个 python 文件中需要写两个方法。

关于注解

@Rule

一般用在“可交互插件”和“无交互插件”类上。

@Plugin

WEB指纹

这里顺便再说一下如何添加指纹库。

指纹库位于 base 模块,是一个枚举类。

可以在首部或尾部添加一条新的枚举,尽量使用 $ 开头。

***个参数是 指纹的名称,如果第二个参数是 String 类型则是该指纹的说明。

FingerBean 类是指纹匹配对象。

如何使用jython调用python的scipy和numpy

这个是可以的,之所以调用不到是因为python执行时的sys.path和Jython的sys.path路径不一致,你可以写一个.py文件print一下sys.path,然后再用java执行这个.py文件再看一下输出路径。

有两种解决方法,一是手动添加第三方库路径:

        PySystemState sys = Py.getSystemState(); 

        System.out.println(sys.path.toString());

        sys.path.add("F:\Python27\Lib\site-packages\numpy");

再一个是把第三方库文件夹放到执行的.py脚本同级目录。

参考:网页链接

使用jython从python传到Java的中文为乱码如何处理?

在将 Python 代码转换为 Java 代码时,如果出现中文乱码问题,可以考虑以下方法解决:

在 Python 代码中使用 Unicode 编码,并在 Java 代码中设置字符集为 "UTF-8"。

使用 Python 的字符串转码函数,如 .encode('utf-8') ,将字符串转换为 UTF-8 编码。

使用 Java 的字符串转码函数,如 new String(string.getBytes("ISO-8859-1"), "UTF-8") ,将字符串转换为 UTF-8 编码。

使用 Jython 中的 sys 模块,设置系统默认编码为 UTF-8 。

设置环境变量,在命令行中输入 export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"

这些方法中的任意一种都可能有助于解决中文乱码问题,但是具体解决方案取决于应用程序的具体情况。

Jython的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python语言、Jython的信息别忘了在本站进行查找喔。

发表评论
0评