调用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);
追溯(最里面的):
文件“/scratch/app/product/fmw/obpinstall/patching/scripts/PatchUtility.py”,第4行,在?
ImportError:没有名为subprocess的模块
但是如果我使用终端python PatchUtility.py
更新:我找到了一些东西
Jython有一些限制:
有许多不同之处。首先,Jython程序不能使用CPython 用C语言编写的扩展模块。这些模块通常都带有文件 扩展名.so,.pyd或.dll。
子进程内部调用C扩展吗?
答案 0 :(得分:1)
简而言之:不,或许。或者是的。 但最重要的是,在Jython,No。
TLDR:Jython有自己的子进程实现
python文档中的细节有点粗略,但PEP有更多细节(https://www.python.org/dev/peps/pep-0324/)。这是它应该如何工作的规范,而不是实际的实现:Python的实现可以做任何它喜欢的东西,只要它在功能上是相同的(没问题,使它不是'无论如何'它喜欢但是......你明白了。)
来自规范:
- 在POSIX平台上,不需要扩展模块:模块 使用os.fork(),os.execvp()等。
- 在Windows平台上,该模块需要Mark Hammond's Windows扩展[5],或称为的小扩展模块 _subprocess。
Subprocess PEP旨在防止使用os.popen
类型函数时发生的奇迹,但是我也注意到Jython文档中这是为jython实现的,os.fork和它的整个子进程模块都是自己的权利:http://www.jython.org/docs/library/subprocess.html
我怀疑你在某处有另一个错误,也许是一个导入错误,导致它看起来像是无法导入的子进程。
您引用的C模块更多地是关于自定义python c模块。这些不能与python函数绑定,jython使用Java位实现其内部。语言提供的所有核心功能都必须移植到Java才能使java交互工作。