【问题标题】:Pygtk threading long command line processPygtk 线程化长命令行进程
【发布时间】:2011-03-31 17:16:17
【问题描述】:

我在 Windows 上的 PyGtk 中。我的程序使用 GraphicsMagick 将 PDF 转换为图像,然后显示图像。多页 PDF 的转换可能会很长,因此程序必须等待命令行返回,我需要解决这个问题并允许用户在创建图像时使用 GUI。到目前为止,我尝试使用 gtk 的线程和 python 的线程都没有奏效,有没有一种方法可以轻松地将 GraphicsMagick 转换为后台进程并返回等待它返回?

我正在使用 subprocess(command) 从命令行执行转换。

【问题讨论】:

    标签: python command-line pygtk graphicsmagick


    【解决方案1】:

    只需使用 subprocess.Popen:

    import subprocess
    subprocess.Popen(["command", "arg1", "arg2"])
    

    有关详细信息,请参阅: http://docs.python.org/library/subprocess.html#using-the-subprocess-module

    如果您确实需要使用线程,请在gtk.main() 之前使用gtk.gdk.threads_init()

    http://library.gnome.org/devel/pygtk/stable/gdk-functions.html#function-gdk--threads-init

    【讨论】:

    • 感谢回答我的问题。不幸的是,我没有问正确的问题,因为我意识到我需要在后台运行的过程不仅仅是一个命令行调用,它是一个循环调用命令行 n 次,无论 PDF 中有多少页面。也许是 subprocess.Popen 和其他一些线程的组合?
    【解决方案2】:

    如果仍有页面需要处理,您可以使用调用subprocess.Popen() 并返回True 的空闲函数。这意味着它将在下一个可用机会时再次调用。当你完成页面后,你可以从空闲函数中返回False,它将不再被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      相关资源
      最近更新 更多