我正在寻找运行一些未经验证的脚本(用一种尚未确定的语言编写,但需要基于Java,因此JRuby,Groovy,Jython,BeanShell等都是候选者).我希望这些脚本能够做一些事情并限制做其他事情.
通常,我只是使用Java的SecurityManager并完成它.这非常简单,让我限制文件和网络访问,关闭JVM的能力等等.这对我想要阻止的高级别东西很有效.
但是我想要允许一些东西,但只能通过我提供的自定义API /库.例如,我不想允许直接网络访问打开到yahoo.com的URLConnection,但如果使用MyURLConnection完成,我没关系.那就是 - 我想要允许的一组方法/类,然后我想要的其他一切不受限制.
我不相信这种类型的安全性可以使用标准的Java安全模型来完成,但也许它可以.我对脚本语言本身的性能或灵活性没有特定要求(脚本将通过基本循环/分支对我的API进行简单的过程调用).所以即使是一个"大"的开销来检查每次反射调用的安全检查也没问题.
建议?
我在jython下导入scapy时遇到了一些问题.我一直在做java,但python只用了一两天.
重现问题的简单案例是:
$jython
>>> import sys
>>> sys.path
['', '/usr/share/jython/Lib', '/usr/lib/site-python', '__classpath__']
>>> from scapy.all import *
Traceback (innermost last):
File "<console>", line 1, in ?
ImportError: no module named scapy
Run Code Online (Sandbox Code Playgroud)
如果我完成这些完全相同的步骤python,一切正常.我怎么告诉jython使用scapy?如果它有帮助,我正在运行ubuntu 10.04并安装了jython和scapy viaapt-get install
最近我在Jython平台上玩Django,并希望在"生产"中看到它的性能.我测试的网站只是一个简单的return HttpResponse("Time %.2f" % time.time())视图,因此不涉及数据库.我尝试了以下两种组合(使用ab -c15 -n500 -k <url>VirtualBox上的Ubuntu Server 10.10中的所有内容完成测量):
J2EE应用服务器(Tomcat/Glassfish),部署了WAR文件
我得到的结果就像
Requests per second: 143.50 [#/sec] (mean)
[...]
Percentage of the requests served within a certain time (ms)
50% 16
66% 16
75% 16
80% 16
90% 31
95% 31
98% 641
99% 3219
100% 3219 (longest request)
Run Code Online (Sandbox Code Playgroud)
显然,服务器偶尔会挂起几秒钟,这是不可接受的.我认为它与重新加载Jython有关,因为启动jythonshell也需要大约3秒钟.
AJP服务使用修补的flup包(+ Apache作为前端)
注意:flup是使用的包manage.py runfcgi,我不得不修补它因为flup的线程/分叉支持似乎不适用于Jython( - > AJP是唯一的工作方法).
这里的结果几乎相同,但有时最后100个请求根本没有得到解答(但服务器进程仍然存在).
我在SO(而不是serverfault)上问这个,因为它特别是Django/Jython. 有没有人有在Jython上部署Django网站的经验?可能有另一种(更快)的方式来为网站服务吗?或者在Java平台上使用Django还为时尚早?
我正在研究一个稍后将部署在servlet容器中的小型django项目.但是如果我使用cPython而不是Jython,开发会快得多.所以我想要做的是测试我的代码是否在我的settiings.py中的cPython或Jython上运行,所以我可以告诉它使用适当的db驱动程序(postgresql_psycopg2或doj.backends.zxjdbc.postgresql).有一个简单的方法吗?
我想模仿一个普通的python列表,除非通过切片添加或删除元素,我想"保存"列表.这可能吗?这是我的尝试,但它永远不会打印"保存".
class InterceptedList(list):
def addSave(func):
def newfunc(self, *args):
func(self, *args)
print 'saving'
return newfunc
__setslice__ = addSave(list.__setslice__)
__delslice__ = addSave(list.__delslice__)
>>> l = InterceptedList()
>>> l.extend([1,2,3,4])
>>> l
[1, 2, 3, 4]
>>> l[3:] = [5] # note: 'saving' is not printed
>>> l
[1, 2, 3, 5]
Run Code Online (Sandbox Code Playgroud)
但这对于其他的方法,如工作append和extend,只是不适合切片操作.
编辑:真正的问题是我使用的是Jython而不是Python而忘了它.对这个问题的评论是正确的.这段代码在Python(2.6)中运行良好.但是,代码和答案都适用于Jython.
看起来我错过了一些东西.
当使用Jython在Java中运行我的Python代码时,会生成Java字节码文件(test.py - > test@py.class).
我可以直接使用java运行这些类吗?
换句话说,我想这样做:
$ java test@py [additional cp args]
Run Code Online (Sandbox Code Playgroud)
工作.
目的:编写Python代码而不必泄露源代码.
嗨伙计们,当我在jython中运行我的程序时,我在以下行得到以下语法错误:
except Exception as detail:
Run Code Online (Sandbox Code Playgroud)
SyntaxError:不匹配的输入'as'期待COLON
但是在python上可以吗?怎么了?我正在尝试在我的python程序中使用stanford pos tagger api(java).还有其他方法吗?
试图在Python中设置一些基本的套接字代码(好吧,Jython,但我不认为这与此相关).
import socket
class Foo(object):
def __init__(self):
#some other init code here
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect("localhost", 2057)
s.send("Testing 1,2,3...")
data = s.recv()
s.close()
print data
Run Code Online (Sandbox Code Playgroud)
它告诉我:
Run Code Online (Sandbox Code Playgroud)s.connect("localhost", 2057) File "<string>", line 1, in connect TypeError: connect() takes exactly 2 arguments (3 given)
我觉得一些非常简单的感觉就是盯着我看,但我不知道我做错了什么.
Python标准库提供了xml.sax.xmlreader.IncrementalParser具有feed()方法的接口.Jython还提供xml.sax了使用Java SAX解析器实现的软件包,但它似乎没有提供IncrementalParser.
有没有办法在Jython中逐步解析XML块?乍一看,我认为可以使用coroutine来实现greenlet,但我立刻意识到它不能在Jython中使用.
我正在调用ant的脚本.我从调用者那里得到它作为单个字符串,但python奇怪地把它当作两个单独的字符串.我有脚本在Windows中用它的路径读取文件名.文件夹结构可以在其间或可以不具有空格
这是一个例子
test.py D:/test/File Name
我知道这可以使用optparse来完成.有没有什么方法可以将param作为单个参数读取,就像我想在sys.argv [index]中获取它一样(作为单个字符串).我已经厌倦了'和'前缀,但没有成功.