【问题标题】:Error in Calling python module from Java从 Java 调用 python 模块时出错
【发布时间】:2016-07-27 07:33:48
【问题描述】:

调用 Python 的 Java 代码:

//arguments to be passed to the script
String[] patchArguments = { patchFileDirectory,centralPatchStagePath,patchId,patchFileName, action };
//initialize the interpreter with properties and arguments
PythonInterpreter.initialize(System.getProperties(), System.getProperties(), patchArguments);
pythonInterpreter = new PythonInterpreter();
//invoke python interpreter to execute the script
pythonInterpreter.execfile(opatchScriptPath + opatchScript);

Traceback(最里面最后):

文件“/scratch/app/product/fmw/obpinstall/patching/scripts/PatchUtility.py”,第 4 行,在?

ImportError: 没有名为子进程的模块

但是子进程已经安装,如果我直接使用终端python PatchUtility.py执行python文件,它就会运行

更新:我发现了一些东西

Jython 有一些限制:

有许多不同之处。一、Jython程序不能使用CPython 用 C 编写的扩展模块。这些模块通常有文件 扩展名 .so、.pyd 或 .dll。

子进程是否在内部调用 C 扩展?

【问题讨论】:

    标签: java python jython-2.7


    【解决方案1】:

    简而言之:不。或者也许。或者是。 但与您最相关的是 Jython,否。

    TLDR:Jython 有自己的子流程实现

    python 文档中的细节有点粗略,但是 PEP 有更多细节(https://www.python.org/dev/peps/pep-0324/)。这是关于它应该如何工作的规范,而不是实际的实现:Python 的实现可以做任何它喜欢的事情,只要它的功能相同(好吧,让它不是它喜欢的“任何东西”,但是......你明白了)。

    来自规范:

    • 在 POSIX 平台上,不需要扩展模块:模块 使用 os.fork()、os.execvp() 等。
    • 在 Windows 平台上,该模块需要 Mark Hammond 的 Windows 扩展[5],或称为 _subprocess。

    子进程 PEP 旨在防止在使用 os.popen 类型函数时发生的奇怪问题,但是我还在 Jython 文档中注意到这是为 jython 实现的,包括 os.fork 和整个子进程模块本身:http://www.jython.org/docs/library/subprocess.html

    我怀疑你在某个地方还有另一个错误,也许是一个导入错误,使它看起来像它的子进程无法导入。

    您所指的 C 模块更多地是关于自定义 python c 模块。这些不起作用,因为它们与 python 函数绑定,而 jython 使用 Java 位实现其内部。该语言提供的所有核心功能都必须已移植到 Java 才能使 Java 交互工作。

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 2010-12-29
      • 2015-02-01
      • 2014-12-30
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多