2017-06-19 47 views
1

我正在使用由照片软件gimp将PDF转换为JPG格式的python脚本。到目前为止,脚本工作正常,但是当完成时,一个cmd窗口被gimp打开,并说“按任意键退出”。这个cmd窗口是gimp.exe进程,我不能用我的脚本(我不想每次运行我的脚本时都要输入用户输入)杀死它。Python和Gimp:如何正确杀死gimp进程?

我尝试了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 

这是我如何调用我的GIMP脚本从Windows命令行:

"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_quit(1)将窗户关上,但它不是。

这似乎是这样一个简单的问题,但我已经花了几个小时,所以任何帮助表示赞赏。谢谢。

额外的控制台窗口被打开了,因为我没有具体说明是瘸子应该记录它的消息:

+0

从我记得,在'gimpfu'模块有一个'.quit()'方法。你试过了吗?通过信号杀死gimp可能是一个坏主意。 –

+0

是的,你说得对,谢谢。我找到了'gimp.quit()'方法。但是,如果我把它放在我的脚本中,例如在for循环下面,我会得到一个错误,提示“python-fu-eval已经关闭而没有返回值”。 – flixe

+0

那个'PDF.exit()'的目的是什么?为什么它没有显示在脚本的源代码中? (为什么你在我给你的例子中没有这样的东西时加了它?)。你尝试删除它吗? – xenoid

回答

2

好吧,我问一个瘸子特定论坛得到了解决。这就是为什么它打开了一个额外的控制台窗口。

所以请求现在看起来是这样:

"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 
+0

事实上,它会更好地删除您的打印语句,或者通过调用某些打印或不打印的函数来取代某些标志。你也可以使用'> NUL'将每一样东西发送到位桶。重新路由标准错误在这里并不是很有用,你打印输出到标准输出,并且当你有真正的错误时,你将看不到它们。另外,对未来读者的建议,这是Windows特有的问题。 – xenoid