簡體   English   中英

如何通過Gimp從Shell執行Python-Fu腳本

[英]How to Execute Python-Fu script from shell via Gimp

我試圖找出一種簡單的方法來執行我編寫的Python-Fu腳本,該腳本在Gimp的Python-Fu解釋器插件中以單線程模式運行,但是由於將其重構為多處理等效項,因此將不再起作用Windows非POSIX / OS.Fork限制在Pool.map_async()中彈出。 作為一種變通方法,我試圖直接從cmd shell調用腳本,但是找不到正確的命令來完成該腳本。 我在PATH變量上有gimp bin目錄,並嘗試獲得如下所示的功能...

c:\>gimp-console-2.8 --no-interface --batch "(python-fu execfile('myPyFuScript.py'))"
c:\>gimp-console-2.8 --no-interface --batch "myPyFuScript.py"

是否可以通過Windows cmd shell發出的命令讓Gimp使用其Python-Fu模塊執行python腳本?

只是為了增加背景知識,我從以下文檔中汲取了靈感...

從Shell進行GIMP Python調用

所有這些意味着您可以使用(plug-in-script-fu-eval…)評估程序輕松地直接從您的shell調用GIMP Python插件,例如上述插件:

gimp --no-interface --batch '(python-fu-console-echo RUN-NONINTERACTIVE "another string" 777 3.1416 (list 1 0 0))' '(gimp-quit 1)'

--batch之后傳遞給GIMP的字符串本身是在script-fu中執行的。 運行Python腳本的簡單方法是編寫一個script-fu表達式,該表達式將調用您的python過程。 例如:

gimp  -n --no-interface --batch "(python-fu-gradient-save-as-css  RUN-NONINTERACTIVE \"Sunrise\" \"/tmp/grad.css\")" --batch "(gimp-quit 1)"

除了使用腳本fu表達式"(python-fu-gradient-save-as-css ... )" ,還應注意以下幾點:

  • 使用-n來確保它在新的GIMP實例中運行(也許根本不需要-它確實對我有用)
  • 使用雙引號( " )分隔script-fu字符串中的字符串參數。單引號在scheme / script-fu中具有不同的語法含義。
  • 需要調用gimp-quit 1否則,即使使用--no-interface --batch ,GIMP --no-interface --batch繼續運行。

由於您將要從外部Python腳本中調用GIMP,因此轉義"是沒有問題的-但是從Windows中的命令提示符處調用它的人將不得不找到一種創新的方式來做到這一點。帶有\\外殼

那應該回答你的問題。 但是,我將做進一步的探討:除非您在腳本中進行的處理確實很繁重,否則每次腳本調用都要調用單獨的GIMP實例的開銷可能很大(我沒有衡量內存使用情況-在操作系統正確緩存了任務之后,在我的i5非SSD機器上每次調用大約需要2秒鍾-因此您不妨忍受它)。

但是,由於性能是一個問題,我的處理方法是編寫GIMP-Python過程來實例化XMLRPC(或JSONRPC )服務器,並編寫外部控制腳本以通過RPC調用“實際”過程。 在Python中使用XMLRPC很容易-少於10行的樣板代碼,您通常可以直接從http://python.org中的模塊文檔直接復制和粘貼。 這樣,您可以通過簡單,快速的RPC調用(每個邏輯核心一個GIMP)准備好執行任務的GIMO進程池,並且必須在控制腳本中添加一些邏輯以循環/排隊調用,當然)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM