当前位置: 首页 > 面试题库 >

如何使用python调用jar文件中的python脚本?

融焕
2023-03-14
问题内容

我正在研究一个散布一堆jython和Java代码的应用程序。由于程序的性质(使用wsadmin),我们实际上仅限于Python 2.1

当前,我们有一个同时包含Java源代码和.py模块的jar。该代码当前是使用java调用的,但我希望删除此代码,以便将尽可能多的功能迁移到jython。

我的问题是我想从调用的jython脚本中导入或执行现有jar文件中的python模块。我尝试了几种不同的方法,但均未成功。

我的目录结构如下:

application.jar
  |-- com
       |--example
            |-- action
                 |-- MyAction.class
                 |-- pre_myAction.py

我尝试的第一种方法是从罐子中导入。我将jar添加到sys.path中,并尝试同时使用 import
com.example.action.myAction
import myAction 导入模块。但是,即使我将 init
.py文件放入每个级别的目录中也没有成功。

我尝试的第二种方法是使用java类加载资源。所以我写了下面的代码:

import sys
import os
import com.example.action.MyAction as MyAction

scriptName = str(MyAction.getResource('/com/example/action/myAction.py'))
scriptStr = MyAction.getResourceAsStream('/com/example/action/myAction.py')

try:
  print execfile(scriptStr) 
except:
  print "failed 1"

try:
  print execfile(scriptName) 
except:
  print "failed 2"

这些都失败了。现在我对如何进行感到有些茫然。有任何想法吗 ?

干杯,

特雷弗


问题答案:

以下对我有用:

import sys
import os

import java.lang.ClassLoader 
import java.io.InputStreamReader
import java.io.BufferedReader

loader = java.lang.ClassLoader.getSystemClassLoader()
stream = loader.getResourceAsStream("com/example/action/myAction.py")
reader = java.io.BufferedReader(java.io.InputStreamReader(stream))

script = ""                          
line = reader.readLine()
while (line != None) : 
    script += line + "\n"
    line = reader.readLine()

exec(script)
  1. 从ClassPath作为’script’中的字符串加载脚本
  2. 使用exec执行脚本


 类似资料:
  • 问题内容: 我尝试执行以下操作(我的jar和python文件都在同一目录中): 和 无论是工作过。因此,我当时以为应该改用Jython,但我认为必须有一种更简单的方法来通过python执行jar文件。 你知道我可能做错了什么吗?或者,是否还有其他网站可以进一步研究我的问题? 问题答案: 我将以这种方式使用子流程: 但是,如果你有一个正确配置的,你应该能够直接运行jar,因为你写的。 那么,这正是您

  • 问题内容: 我需要从我的Python脚本执行该脚本。 可能吗?该脚本会生成一些输出,并写入一些文件。如何访问这些文件?我尝试了子流程调用功能,但没有成功。 应用程序“ bar”还引用了一些库,除了输出外,它还创建了文件“ bar.xml”。我如何访问这些文件?只是通过使用open()? 谢谢, 编辑: Python运行时的错误仅是这一行。 问题答案: 要执行外部程序,请执行以下操作: 是的,假设您

  • 问题内容: 我有一些用PHP编写的代码,但是我还开发了一个用Python编写的脚本。是否可以从PHP代码调用此Python脚本? 如果是,如何从PHP将参数传递给Python脚本? 我试图找到一个没有成功的答案。 有人可以给我一个提示吗? 问题答案: 您使用系统功能:http : //php.net/manual/en/function.system.php 像这样:

  • 本文向大家介绍如何使用Python脚本实现文件拷贝,包括了如何使用Python脚本实现文件拷贝的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何使用Python脚本实现文件拷贝,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.实现目的 统一时间对服务器某文件夹内文件进行备份保存,如若备份成功则不提示任何错误,否则将以邮件的形式告知

  • 问题内容: Python的新手,第一次发布者,请对我方便!我想在当前文件夹内的特定扩展名(在示例中为)的所有文件中插入一行文本。如果方便的话,它可以指向一个特定的文件夹。 下面是我复制和修改的内容,它确实可以满足我对一个特定文件的需要,完全不需要用SIT替换sit的部分,但是如果删除它,该程序将无法工作。我不知道为什么会这样,但是我可以接受。 我的问题是,如何为目录中的所有文件运行此文件?我尝试用

  • 问题内容: 从内部使用文件的最简单方法是什么? 具体来说,如何在不编写任何其他包装程序代码的情况下完成此功能? 与使用第三方库相比,本机功能是首选。 问题答案: 为了易于使用,ctypes是必经之路。 以下ctypes示例来自我编写的实际代码(在Python 2.5中)。到目前为止,这是我找到的最简单的方法来完成你的要求。 的ctypes东西具有:(所有的C型的数据类型int,char,short