Python和Gimp:如何正确地终止Gimp进程?

Python和Gimp:如何正确地终止Gimp进程?,python,windows,gimp,gimpfu,Python,Windows,Gimp,Gimpfu,我正在使用一个python脚本,该脚本由照片软件gimp调用,以将pdf转换为jpg。到目前为止,脚本工作正常,但当它完成时,gimp会打开一个cmd窗口,并显示“按任意键退出”。这个cmd窗口是gimp.exe进程,我无法用脚本杀死它(我不想每次运行脚本时都输入用户输入) 我尝试了python命令,如os.system(“taskkill/im gimp-2.8.exe”)和sys.exit(0),但它们都不起作用 这是我的python脚本: import os,time,sys,glob,r

我正在使用一个python脚本,该脚本由照片软件gimp调用,以将pdf转换为jpg。到目前为止,脚本工作正常,但当它完成时,gimp会打开一个cmd窗口,并显示“按任意键退出”。这个cmd窗口是gimp.exe进程,我无法用脚本杀死它(我不想每次运行脚本时都输入用户输入)

我尝试了python命令,如
os.system(“taskkill/im gimp-2.8.exe”)
sys.exit(0)
,但它们都不起作用

这是我的python脚本:

import os,time,sys,glob,re
from gimpfu import *

rxcountpages = re.compile(r"/Type\s*/Page([^s]|$)", re.MULTILINE|re.DOTALL)

#Convert a single pdf file
def process(infile, outfile):
    print "Processing file %s " % infile

    for x in range(1,countPages(infile) + 1):
        print "Test"
        countStr = str(x)
        pdb.file_ps_load_setargs(100, 0, 0, 0, countStr, 6, 2, 2)
        image = pdb.file_ps_load(infile,infile)
        drawable = pdb.gimp_image_get_active_layer(image)
        print "File %s loaded OK" % infile
        #outfile=os.path.join('processed',os.path.basename(infile))
        #outfile=os.path.join(os.path.dirname(infile),outfile)
        print outfile
        filename, file_extension = os.path.splitext(outfile)
        output = filename + "_" + countStr + ".jpg"
        print "Saving to %s" % outfile
        pdb.file_jpeg_save(image, drawable, output, output, 0.9,0,1,0,"",0,1,0,0)
        print "Saved to %s" % outfile
        pdb.gimp_image_delete(image)
        print "---------"

def countPages(filename):  
    data = file(filename,"rb").read()  
    return len(rxcountpages.findall(data))

if __name__ == "__main__":
    print "Running as __main__ with args: %s" % sys.argv
以下是我从windows命令行调用gimp脚本的方式:

"C:\Program Files\GIMP 2\bin\gimp-2.8.exe" -idf --batch-interpreter python-fu-eval -b "import sys;sys.path=['.']+sys.path;import PDF;PDF.process('%1','%2');PDF.exit()" -b "pdb.gimp_quit(1)"
我本以为gimp命令
gimp\u quit(1)
会关闭窗口,但它不会


这似乎是一个很简单的问题,但我已经花了几个小时在这个问题上,所以任何帮助都很感激。谢谢。

好的,我通过在gimp特定论坛上提问得到了解决方案:

额外的控制台窗口被打开,因为我没有指定gimp应该记录它的消息。这就是为什么它打开了一个额外的控制台窗口

因此,请求现在如下所示:

"C:\Program Files\GIMP 2\bin\gimp-console-2.8.exe" -idf --batch-interpreter python-fu-eval -b "import sys;sys.path=['.']+sys.path;import PDF;PDF.process('%1','%2');" -b "pdb.gimp_quit(1)" 1>c:\\temp\\gimp_startup.txt 2>&1

据我所知,
gimpfu
模块有一个
.quit()
方法。你试过了吗?通过信号杀死gimp可能是个坏主意。是的,你说得对,谢谢。我找到了方法
gimp.quit()
。但是如果我把它放在我的脚本中,例如for循环下面,我会得到一个错误,说“python fu eval已经关闭,没有返回值”。这个
PDF.exit()
的目的是什么?为什么它没有显示在脚本的源代码中?(我给你的例子中没有这样的东西,你为什么还要加上呢?)。您是否尝试删除它?Sry,我的脚本中缺少该方法,尽管它除了调用
gimp.quit()
之外没有做任何其他事情。但是,无论我在python脚本中调用gimp-2.8.exe或gimp.quit()时使用
-b“pdb.gimp_quit(1)”
尝试,它们都不会关闭gimp命令行窗口。实际上,最好是删除打印语句,或者通过调用某个函数来替换它们,该函数是否打印取决于某个标志。您还可以使用
>NUL
将所有内容发送到位存储桶。在这里,重新路由stderr并没有真正的用处,您的打印输出将转到stdout,并且在出现真正错误的那天,您将看不到它们。另外,提醒未来的读者,这是一个Windows特有的问题。