在python中的另一个脚本中执行脚本

时间:2013-12-30 00:07:49

标签: python

我想创建一个运行OpenOffice并使用Py-Uno创建odt文件的python脚本。

这就是我的尝试:

import os
import uno

os.system("soffice '--accept=socket,host=localhost,port=2002;urp;'")

local = uno.getComponentContext()
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)

context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")

desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)

#Start new document
document = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, ())
cursor = document.Text.createTextCursor()

#Insert text
document.Text.insertString(cursor, "This text is being added to openoffice using python and uno package.", 0)

document.Text.insertString(cursor, "\n\nThis is a new paragraph.", 0)

当我运行此脚本时,OpenOffice会打开,但它不会创建新文件。 似乎在os.system正在运行时,脚本的其余部分不会被执行。我能做些什么才能让它发挥作用? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您应该使用subprocess模块:

import subprocess
subprocess.Popen(["soffice","'--accept=socket,host=localhost,port=2002;urp;'"])

os.system将等待新进程终止。使用Popen而不重定向过程'stdout它将在后台执行。