2012-01-10 46 views

回答

4

您可以使用Pidgin的DBus API关闭对话。请参阅Pidgin's DbusHowto。以下Python代码将关闭名称与to_close列表匹配的所有对话窗口。 (我用的IM用户名测试这一点,但不能与IRC聊天室的名字,所以它可能需要您的目的,一些额外的调整。)

to_close = ["#general", "nickserv"] 
for conv in purple.PurpleGetConversations(): 
    if purple.PurpleConversationGetName(conv) in to_close: 
     purple.PurpleConversationDestroy(conv) 

把下面的在你的Python文件的顶部初始化purple对象用洋泾浜/芬奇在d-总线(从DbusHowTo)进行通信:

#!/usr/bin/env python 
import dbus 
import sys 

# Based off http://developer.pidgin.im/wiki/DbusHowto 
bus = dbus.SessionBus() 
obj = bus.get_object("im.pidgin.purple.PurpleService", 
        "/im/pidgin/purple/PurpleObject") 
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") 

对于那些你们谁不喜欢的Python,这里使用purple-remotesh在重写同样的事情(注意:for arg迭代参数到脚本):

#!/bin/sh 
# Note that the result of sed here is a string like "(1234) (5678)". 
for conversation in `purple-remote PurpleGetConversations | sed 's/^.*[[]//' | sed 's/].*$//' | sed s/dbus.Int32//g | sed s/,//g` 
do 
    conv_name=`purple-remote "PurpleConversationGetName$conversation"` 
    for arg 
    do 
     if [ "$arg" = "$conv_name" ] 
     then 
      purple-remote "PurpleConversationDestroy$conversation" 
     fi 
    done 
done 

虽然我完全不确定管道的脆弱程度如何,但sed s。 Python似乎更干净。

+0

谢谢!用bash使用紫色远程重写你的代码 – kirill 2012-02-14 07:24:34

+0

非常感谢你再次!我说过是错的。英语不是我的母语。我将你早期的代码改写为bash。我为这个麻烦感到抱歉。附:你的代码比我的好。 – kirill 2012-02-15 06:21:48

相关问题