2013-05-03 49 views
0

我正在嘗試使用python編寫一個下載程序腳本(放在統一啓動程序中),它使用所有正確的參數調用wget。該腳本從剪貼板中提取url,並從gtk主剪貼板中提取文件名,通過文本選擇或複製和鼠標中鍵單擊粘貼。代碼很簡單。Python:阻止系統進程從後臺進入

import gtk 
from os import system as sys 

url = str(gtk.clipboard_get().wait_for_text()) 
name = str(gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY).wait_for_text()) 

if name.lower()=='none' : 
    sys("/usr/bin/canberra-gtk-play --id='dialog-warning'") 
    exit(1) 

sys("/usr/bin/canberra-gtk-play --id='downloading'") 
com='wget -c -t 0 "%s" -O "%s"' % (url,name) 
sys("gnome-terminal -e '%s'" % com) 

該腳本打開一個終端窗口並點擊wget輸出。問題是關閉gnome-terminal並不會導致wget退出,而是在後臺運行。是否有可能阻止這種情況發生

回答

0

問題是,by design,wget忽略在其父進程終止時發送的SIGHUP

一個解決方案是使用Python signal模塊趕上,當你關閉終端窗口應該被髮送到你的腳本SIGCHLD,並註冊一個處理程序,明確地發出SIGINTSIGTERMwget

+0

我該怎麼做。你可以用一個例子來展示,我將把它合併到代碼中 – CuriousCat 2013-05-04 06:01:31

+0

@SaketDandawate如果你對信號不熟悉,用像[this]這樣的腳本運行'wget'可能會更簡單(https://gist.github .com/unakatsuo/1048855)用'hup2term wget ',它將父進程的SIGHUP轉換爲SIGTERM,或者用CTRL-C關閉窗口(發送'SIGINT'到'wget')關閉終端窗口。 – Aya 2013-05-04 15:42:13