Я разрабатываю irc-клиент на python на основе irc.IRCClient и pygtk, я использую правильный реактор, и все работает нормально. Теперь я бы запускал браузер при нажатии URL-адреса... Лучше использовать xdg-open, который запускает настроенный браузер по умолчанию (в бесплатном рабочем столе, совместимом с DE). URL-адрес выбирается в событии нажатия кнопки gtk. Я перепробовал все возможные варианты, но когда-либо процессор загружался на 100%. Ниже приведены различные способы, которые я пробовал, только использование реактора.spawnProcess кажется многообещающим, потому что, пока браузер не открыт, все в порядке, при его закрытии процессор достигает 100%. Все остальные процессоры скоро скачут до 100% и останутся. Запуск браузера напрямую ничего не меняет. Что я делаю неправильно?
питон 2.6.5 - скрученный 10.1.0 - pygtk 2.16.0
Marco
def on_click(self, b):
.....
.....
if data:
url = self.urls[int(data)]
# 100% cpu forever
browser = utils.getProcessValue('/usr/bin/xdg-open', [url,], os.environ)
browser.addCallback(self.printExitValue)
# 100% cpu after closing browser
xdgProcess = XDGProcessProtocol()
reactor.spawnProcess(xdgProcess, '/usr/bin/xdg-open', ['/usr/bin/xdg-open', url], os.environ )
# 100% cpu forever
os.system('xdg-open %s' % url)
# 100% cpu forever
os.spawnl(os.P_NOWAIT, '/usr/bin/xdg-open', '/usr/bin/xdg-open', url)
# 100% cpu forever
reactor.callInThread(self.browser, url)
return 0
def printExitValue(self, val):
print 'xdg-open %d' % val
def browser(self, url):
os.spawnl(os.P_NOWAIT, '/usr/bin/xdg-open', '/usr/bin/xdg-open', url)
class XDGProcessProtocol(protocol.ProcessProtocol):
def __init__(self):
self.data = ''
def connectionMade(self):
pass
def outReceived(self, data):
self.data = self.data + data
def errReceived(self, data):
self.data = self.data + data
def inConnectionLost(self):
pass
def outConnectionLost(self):
print self.data
def errConnectionLost(self):
pass
def processExited(self, reason):
print "processExited, status %d" % (reason.value.exitCode,)
def processEnded(self, reason):
print "processEnded, status %d" % (reason.value.exitCode,)
print "quitting"
код>
import webbrowser; webbrowser.open(url)
- person Blue Peppers   schedule 01.09.2010