当通过Popen从Sublime插件调用时,小的可执行文件挂起

时间:2016-01-06 11:59:43

标签: python gtk sublimetext2 sublime-text-plugin

好的,问题有一些我必须首先描述的部分,然后是问题。 我写了一个Sublime Text 2插件,用于从系统的文本选择中打开一个新文件。即使在终端中选择了文本,该命令也应该从所选文本中打开文件 - 是的,它是Nedit的Ctrl + Y功能。 为此,我为Sublime编写了一个插件(我的代码在安全的环境中,所以我只能在这里重现相关的部分 - 原谅错别字)

class OpenNamedFileCommand(sublime_plugin.WindowCommand):
    def run(self):
        cmd = ['/home/razvan/clip.exe']
        popen_arg_list = {"shell": False,
                          "stdout":subprocess.PIPE,
                          "stdin":subprocess.PIPE}
        proc = subprocess.Popen(cmd, **popen_arg_list)
        selection = proc.communicate()[0]
        print selection #for debug puposes i just print the text in the sublime console

另一段代码是clip.exe,一个用C编写的小型gtk应用程序(下面的简化版本 - 我使用了glib.h,gtk.h和string.h)

int main(int argc, char **argv){
    GtkClipboard *clipboard;
    gchar *clipboard_text;
    gtk_init(&argc, &argv);
    clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
    clipboard_text = gtk_clipboard_wait_for_text(clipboard);
    puts(clipboard_text);
    return 0;
}

用法:

  1. 在终端中选择文本,转到Sublime并调用命令 - >选定的文本显示为Sublime控制台
  2. 取消选择终端中的文本并转到Sublime并调用命令 - >最后一个选择显示确定
  3. 在Sublime中选择文本并调用Sublime命令 - >选中的文字显示确定
  4. 在Sublime或终端中选择文本并在linux终端中调用clip.exe可执行文件 - >所选文本在终端
  5. 中显示正常
  6. 在Sublime中选择文本,在Sublime中取消选择文本并在终端clip.exe中调用 - >最后一个选项显示确定
  7. 现在问题:在Sublime中选择文本,在Sublime中取消选择文本并调用Sublime命令 - > Sublime挂起约30秒后输出一个空字符串
  8. 我试过了:

    1. 使用打印进行调试 - >挂起似乎发生在调用通信()但是印刷品的输出全部在Sublime解冻后立即写入,因此它无用(我的意思是打印全部运行函数都被最终放入一个无论我把它们放在哪里,都去吧。)
    2. 尝试使用signal.alarm在1秒后设置闹钟并将kill()发送到proc处理程序 - >仍然冻结
    3. 思考? 提前感谢您阅读这本小说:)

0 个答案:

没有答案