Openoffice3.1 pyuno 错误令人困惑
我在尝试让一些示例代码,包括这个示例,在OpenOffice 3.1.1和Python 2.5上运行,但一直没有成功。
很遗憾,pyuno没有提供任何关于出错原因的提示。
In [1]: import uno In [2]: local = uno.getComponentContext() In [3]: resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local) --------------------------------------------------------------------------- com.sun.star.uno.RuntimeException Traceback (most recent call last) /opt/openoffice.org/basis3.1/program/ in () com.sun.star.uno.RuntimeException: : 'tuple' object has no attribute 'getTypes', traceback follows no traceback available
下面是执行/opt/openoffice.org/basis3.1/program/officehelper.py的输出,这个脚本基本上是启动一个无头的Office实例,并返回一个相关的上下文对象。
den@ev:/opt/openoffice.org/basis3.1/program > python officehelper.py Traceback (most recent call last): File "officehelper.py", line 42, in from com.sun.star.connection import NoConnectException File "uno.py", line 273, in _uno_import RuntimeException = pyuno.getClass( "com.sun.star.uno.RuntimeException" ) RuntimeError: pyuno.getClass: expecting one string argument
pyuno只接受一个参数,而且这个参数必须是字符串,具体定义可以在这个链接找到。不过,我怎么也没法让pyuno.getClass正常工作。
有没有什么建议可以让我让pyuno正常工作呢?
1 个回答
在[1]:导入uno模块
在[2]:获取本地组件上下文
在[3]:通过本地上下文创建一个“com.sun.star.bridge.UnoUrlResolver”的实例
我觉得面向对象编程(OOP)搞得很糟糕。我知道这有点题外话,但我之前尝试让uno工作,结果放弃了。这段代码简直是Steve Yegge的风格(可以去看看http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html)。
把这些代码翻译成更容易理解的形式,大概是:
“让‘local’成为调用‘uno’的‘get component context’方法的结果。让‘service manager’成为‘local’的一个属性。让‘resolver’成为调用‘service manager’的‘create instance with context’方法的结果,使用的参数是‘com sun star bridge uno url resolver’和‘local’。”
天哪。难怪这个程序这么复杂、难懂,而且自我引用却又不自知,肯定有什么问题……你调用‘local’的一个子方法,而这个子方法还得知道‘local’是什么意思?这是什么鬼?向那些能看懂这些的开发者致敬,祝你们调试顺利。
补充:
谢谢你的评论和支持。
关于pyuno的问题,我其实无能为力,但我鼓励大家耐心尝试,设定一个明确的截止日期。
我还建议向pyuno团队提交一个正式的BUG报告(如果他们真的还在活跃的话——我感觉这个项目有点沉寂),因为那个错误信息实在是太无意义了:相关的方法似乎要求一个字符串参数,而它确实得到了一个,但它却抱怨说没有得到。这种情况让人觉得可以合理地认为是代码有问题。
在这种情况下,我通常会查看源代码。不过你应该已经做过了,对吧?
我讨厌别人问我“你为什么想这么做?”当我请求帮助的时候。然而,有时候会有人(也许是你)在这个过程中提出另一条可行的路径,这条路径虽然不解决特定问题,但有助于解决更大的问题。所以,如果我可以问一下:整体情况是什么样的?