我正在使用以下命令启动子进程:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用时杀死:
p.terminate()
Run Code Online (Sandbox Code Playgroud)
要么
p.kill()
Run Code Online (Sandbox Code Playgroud)
该命令在后台继续运行,所以我想知道如何实际终止该进程.
请注意,当我运行命令时:
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)
它在发出时会成功终止p.terminate().
当我在火车上班时,我将上网本连接到我的Nexus One的wifi热点.当我通过隧道时,我的手机显然会失去它的3G连接,并且在火车出现后需要一段时间重新建立.但上网本wifi标识保持不变,因为它仍然连接到手机本身.
我写了一个小python程序,试图ping服务器,从而决定互联网是否可用(随意建议一种检测互联网连接的方法,可以更快或使用更少的带宽,因为我每月上限).
我的问题是:如何在Python中为GNOME Panel 2.30.2创建一个applet,以图形方式显示这个状态,这样我就可以决定何时继续点击链接并期望互联网正常工作.
我得到了这个带有面板按钮的示例,但是想要一个根据情况而变化的图标.
我已经使用Python几年了但之前没有编码gnome.我在10.04上使用ubuntu桌面版作为我的登录而不是统一.
我正在使用GTK为GUI编写Python应用程序.我注意到从终端用Ctrl-C关闭它是行不通的,我发现这是因为一个错误,所以我试图手动处理信号.问题是如果我将默认行为设置为默认行为,则捕获信号并正确关闭应用程序,但如果我使用自定义处理程序则不起作用.这是我的(简化)代码:
from gi.repository import Gtk
import signal
class MainWindow(Gtk.Window):
def __init__(self):
...
signal.signal(signal.SIGINT, self.__signal_handler)
def __signal_handler(self, signal, frame):
print "Caught!"
...
if __name__ == "__main__":
win = MainWindow()
win.show_all()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
相反,如果我设置了默认行为,则正确捕获信号:
from gi.repository import Gtk
import signal
class MainWindow(Gtk.Window):
def __init__(self):
...
signal.signal(signal.SIGINT, signal.SIG_DFL)
...
if __name__ == "__main__":
win = MainWindow()
win.show_all()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
编辑:
我尝试了更多,我注意到信号实际上已被捕获,但窗口不是立即关闭,而是仅在重新获得焦点时.相反,如果我跑了
kill -9 pid
Run Code Online (Sandbox Code Playgroud)
从另一个终端窗口,应用程序立即关闭.
python ×3
gnome ×1
gtk ×1
gtk3 ×1
kill-process ×1
linux ×1
panel ×1
pygtk ×1
signals ×1
subprocess ×1