目录树中不同级别的CORBA python文件而不是导入它们的模块

Posted

技术标签:

【中文标题】目录树中不同级别的CORBA python文件而不是导入它们的模块【英文标题】:CORBA python files on different level in dir tree than modules which imports them 【发布时间】:2017-03-24 10:51:42 【问题描述】:

我遵循了使用 Python 进行 CORBA 开发的教程,位于:omniORBpy User’s Guide

从给定的 IDL 文件生成 Python 文件后,我注意到来自包 Example 和 Example__POA 的 init.py 正在尝试导入文件 echo_example_idl.py,该文件位于下一层。目录树如下:

---Example (module)
|
|------ init.py
|
---Example__POA (module)
|
|------ init.py    
|
---echo_example_idl.py 
---echo_example.idl
---example_execution.py

示例模块中的 init.py 内容:

# DO NOT EDIT THIS FILE!
#
# Python module Example generated by omniidl

import omniORB
omniORB.updateModule("Example")

# ** 1. Stub files contributing to this module
import echo_example_idl

# ** 2. Sub-modules

# ** 3. End

example_execution.py 的内容:

#!/usr/bin/env python
import sys
from omniORB import CORBA, PortableServer
import Example, Example__POA

class Echo_i (Example__POA.Echo):
    def echoString(self, mesg):
        print "echoString() called with message:", mesg
        return mesg

orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
poa = orb.resolve_initial_references("RootPOA")

ei = Echo_i()
eo = ei._this()

poaManager = poa._get_the_POAManager()
poaManager.activate()

message = "Hello"
result = eo.echoString(message)
print "I said '%s'. The object said '%s'." % (message,result)

我可以成功启动程序。

    两个模块的 init.py 中的 import 语句如何正常工作?是因为我在与通过omniidl生成的源文件相同的目录中运行example_execution.py吗?

    如果我想在 包含源文件的目录(例如在我想要的一个目录中 拥有所有 CORBA 资源,而另一个我想保留 example_execution.py 文件)。如果我这样做,我会得到一个 ImportError 对于 echo_example_idl.py

【问题讨论】:

【参考方案1】:

我能够解决这个问题。解决方案是在 Python 模块中生成 CORBA 存根和客户端/服务器模块。这可以通过将适当的标志传递给omniidl程序来完成。在我的情况下是:

omniidl -bpython -Wbpackage=example example_echo.idl

感谢我的目录树如下所示(包括执行文件和 IDL 文件本身):

---example (Python module)
|
|------Example (CORBA client module)
|------Example__POA (CORBA server module)
|------echo_example.idl.py
|
---echo_example.idl
---example_execution.py

如果我想使用 CORBA 功能,我只需在文件顶部添加 import example

【讨论】:

以上是关于目录树中不同级别的CORBA python文件而不是导入它们的模块的主要内容,如果未能解决你的问题,请参考以下文章

python 检查当前目录树中的所有python文件以进行编译

python: 不同级别的日志输出到不同文件的日志类

在标准输出上显示 INFO 级别的 python 日志而不更改源代码

Corba 客户端 - Python 和 Corba 服务器 - Java

CORBA 示例使用不同的 JDK [关闭]

Corba AMI 和连接管理