今天是我第一次使用Python,所以我确信这将是一个简单的问题。
我需要从命令行应用程序转换此Python脚本:webkit2png。最终结果将是一个URL,它返回作为查询字符串参数传递给它的网页的图像。我已经在Windows上使用.NET和IE,Gecko和WebKit实现了这一点,但现在需要对OS X上的Safari做同样的事情。
我想我已将其转换,但不幸的是我遇到了在OS X上运行Apache脚本的问题:
app = AppKit.NSApplication.sharedApplication()
# create an app delegate
delegate = AppDelegate.alloc().init()
AppKit.NSApp().setDelegate_(delegate)
# create a window
rect = Foundation.NSMakeRect(0,0,100,100)
win = AppKit.NSWindow.alloc()
win.initWithContentRect_styleMask_backing_defer_ (rect,
AppKit.NSBorderlessWindowMask, 2, 0)
在最后一行“initWithContentRect ...”上抛出错误。我看到的错误是:
<class 'objc.error'>: NSInternalInconsistencyException - Error (1002) creating CGSWindow
args = ('NSInternalInconsistencyException - Error (1002) creating CGSWindow',)
message = 'NSInternalInconsistencyException - Error (1002) creating CGSWindow'
name = u'NSInternalInconsistencyException'
如果我在命令行上运行脚本(在删除CGI之后),它会完美运行。
这是我正在导入的库:
import cgi
import cgitb; cgitb.enable() # for troubleshooting
import sys
try:
import Foundation
import WebKit
import AppKit
import objc
except ImportError:
print "Cannot find pyobjc library files. Are you sure it is installed?"
sys.exit()
答案 0 :(得分:2)
您不能(通常)从与GUI用户无关的进程连接到窗口服务器。见Apple tech note。
基本上,在Apache产生的过程中使用NSWindow
等是一个很大的禁忌。如果没有GUI用户登录,则甚至不保证窗口服务器存在。因此,您无法可靠地执行您想要执行的操作。
问题在于OS X附带的WebKit取决于窗口服务器。一种方法可能是安装Qt,希望它有一个独立于Core Graphics窗口服务器的WebKit后端。