我创建了一个默认的 Maven Java 项目并添加了以下依赖项:
<dependency>
<groupId>org.python</groupId>
<artifactId>jython</artifactId>
<version>2.7.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个包src/main/java/mypkg并添加了这个类:
package mypkg;
import javax.script.*;
class JythonMinimalTest {
public static void main(String[] args) throws Exception {
String engineName = "python";
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(engineName);
if (engine == null) {
System.err.println("ERROR: `" + engineName + "` not available.");
System.err.println("Available engines: ");
for (ScriptEngineFactory factory: manager.getEngineFactories()) {
System.err.println(factory);
System.err.println("names:");
for (String name: factory.getNames()) {
System.err.println(" " + name);
}
}
System.exit(999);
}
engine.eval("print('hello, world')");
}
} …Run Code Online (Sandbox Code Playgroud) 我无法从我的Jython程序连接到数据库.纯Java程序可以连接,我可以从Jython连接到db,但只使用JDBC-ODBC桥:"sun.jdbc.odbc.JdbcOdbcDriver".如果我使用本机JDBC驱动程序,我的程序会因"找不到驱动程序"异常而失败.
码:
import sys
from com.ziclix.python.sql import zxJDBC
connection1 = zxJDBC.connect('jdbc:odbc:test_odbc', 'postgres', 'postgres', 'sun.jdbc.odbc.JdbcOdbcDriver')
print "JDBC:ODBC connection set"
connection2 = zxJDBC.connect('jdbc:postgresql://127.0.0.1/test?stringtype=unspecified', 'postgres', 'postgres', 'org.postgresql.Driver')
print "JDBC native connection set"
Run Code Online (Sandbox Code Playgroud)
输出:
C:\tools\pyscripts\scripts\db_examples>jython --version
Jython 2.5b1 (trunk:5903:5905, Jan 9 2009, 16:01:29)
[Java HotSpot(TM) Client VM (Sun Microsystems Inc.)] on java1.6.0_11
C:\tools\pyscripts\scripts\db_examples>jython pg_test.py
JDBC:ODBC connection set
Traceback (most recent call last):
File "pg_test.py", line 6, in <module>
connection2 = zxJDBC.connect('jdbc:postgresql://127.0.0.1/test?stringtype=un
specified', 'postgres', 'postgres', 'org.postgresql.Driver')
zxJDBC.DatabaseError: driver [org.postgresql.Driver] not found
Run Code Online (Sandbox Code Playgroud)
我认为我的CLASSPATH设置正确,而本机Java程序可以使用本机驱动程序连接到此数据库.我发现所有JDBC驱动程序都在cachedir\packages中有.pkc文件.
我应该设置什么来获取数据库连接?
我需要从该脚本访问运行jython脚本的java类?有帮助吗?
更新:这样的事情:
//JAVA CLASS
class Test{
public String text;
public Test
{
PythonInterpreter pi = new PythonInterpreter(null);
pi.execfile("test.py");
}
}
Run Code Online (Sandbox Code Playgroud)
所以int test.py我需要做一些事情来改变Test类中的文本值
#test.py
doSomething()
Text.test = "new value"
Run Code Online (Sandbox Code Playgroud)
希望它更清楚
你们知道JRuby和Jython使用什么解析器来生成JVM字节码吗?是ANTLR还是JavaCC,还是在实现中使用其他解析器?
我想扩大图片的一部分,在这个例子中,是一个鼻子.
我有一个功能来选择我要放大的图片部分.
def copyAndPaste(picture):
height = getHeight(picture)
width = getWidth(picture)
newPicture = makeEmptyPicture(width, height)
for x in range(width):
for y in range(height):
pxl = getPixel(picture,x,y)
if (x>48 and x<59) and (y>58 and y<71):
newPxl =getPixel(newPicture, #?,#?)
else:
newPxl = getPixel(newPicture, x,y)
color = getColor(pxl)
setColor(newPxl,color)
return newPicture
def d():
f=pickAFile()
picture=makePicture(f)
newPicture = copyAndPaste(picture)
writePictureTo(newPicture, r"D:\FOLDER\0Pic4.jpg")
explore (newPicture)
Run Code Online (Sandbox Code Playgroud)

我还有一个放大图片的功能:
def Enlarge(picture):
height = getHeight(picture)
width = getWidth(picture)
newPicture = makeEmptyPicture(width*2, height*2)
x1=0
for x in range(0,width):
y1=0
for y in …Run Code Online (Sandbox Code Playgroud) 我正在使用sikuli(一种Jython语言,尽管它主要是python)来横向查找特定元素的xml树.
如果我写这样的代码:
xmldoc = ('/ProgramData/XXXXX/XXXXX/XXXX/file.xml')
tree = ET.parse(xmldoc)
root = tree.getroot()
transverse(root)
def transverse(Root):
for x in Root:
if(x.tag=='ecuID'):
if (x.get('id')=='16'):
print x.get('corner')
else:
transverse(x)
Run Code Online (Sandbox Code Playgroud)
控制台打印(5,105)(这是x.get('corner')的值)
如果代码是这样的
xmldoc = ('/ProgramData/XXXXX/XXXXX/XXXX/file.xml')
tree = ET.parse(xmldoc)
root = tree.getroot()
print transverse(root)
def transverse(Root):
for x in Root:
if(x.tag=='ecuID'):
if (x.get('id')=='16'):
return x.get('corner')
else:
return transverse(x)
Run Code Online (Sandbox Code Playgroud)
日志打印出无.我觉得它应该表现相同的方式,我实际上需要它以第二种方式工作.
我认为代码在第一次到达else语句时返回,而不是等待结果被过滤回到顶部,如果你理解我的意思.
任何关于为什么这些代码段行为不同的帮助都会受到极大的关注
我想import pygr:
它失败了:
>>> import seqfmt
ImportError: No module named seqfmt
Run Code Online (Sandbox Code Playgroud)
使用它的程序在Python中运行良好.然而,它调用一个名为C的库seqfmt(它有一个C文件和一个PYX文件).这是可能import转移到Jython或者自C上午我运气不好?
我是RobotFramework的新手,我正在尝试做一个简单的测试.使用Log关键字打印"Hello world"并从java类中获取值(我在Ride上使用jybot):
*** Settings ***
Library robot.MyTest
*** Test Cases ***
Test1
Log Hello World INFO
Get Value
*** Keywords ***
Get Value
Get Value
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,测试将无法通过,它会给我这个错误:
Starting test: MyTest.Test1
20140817 01:00:15.683 : INFO : Hello world
20140817 01:00:15.798 : FAIL : Maximum limit of started keywords exceeded.
Ending test: MyTest.Test1
Run Code Online (Sandbox Code Playgroud)
我搜索过它,但我仍然不知道这个.
因此,我花了很多时间试图弄清楚什么是什么Cython,Jython而且我仍然(更)迷惑任何刚刚开始计算机编程的人.我听说这Cython是一个扩展,但是...... 还有独立的语言?
我认为我理解的是:
Cython/ Jython只是Python你可以分别使用Cor C++/ Javalibraries和Cython/ Jythonsyntax.
它的目的是加快性能并提高代码可读性,当任务更有效地写入C或C++/ Java和,这是通过使用静态类型变量来完成的.
或者是Cython/ Jython只是某种延伸,用来有时,但不是独立?我的意思是,你仍然会写下所有内容Python,然后,对于你宁愿使用的任务C或C++/ Java,你会使用Cython/ Jython代替?(我知道我仍然需要安装Python和类似的东西,因为它依赖.)
因为如果它真的更好,除了它仍然在开发的障碍,因为它是相当新的,不需要C或C++/ Java 完全消失,因为它们Python像C和C++/ 或强大一样容易Java.