LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1348|回复: 2

请教,如何在Python中关机

[复制链接]
发表于 2005-11-16 18:04:05 | 显示全部楼层 |阅读模式
初学python想写一个gtk程序,调用sudo shutdown -h now来关机~~~但是sudo在第一次使用的时候会要求输入密码,随用管道尝试,未果~~~恳请诸位贤士指点~~~

下面是程序,烦劳一看~~~~

-------------------------------------------
#!/usr/bin/python
import pygtk
import gtk
import os

class BaseWindow:
     
  def delete_event(self, widget, data=None):
    print "delete_event"

  def destroy(self, widget, data=None):
    gtk.main_quit()

  def loginout(self, widget, data=None):
    os.system("fvwm -r")

  def shutdown(self, widget, data=None):
    w, r = os.popen2("sudo shutdown -h now")
    w.write(self.entry.get_text())
    w.close()
    self.lblResult.set_text(r.read())

  def reboot(self, widget, data=None):
    w, r = os.popen2("sudo shutdown -r now")
    w.write(self.entry.get_text())
    w.close()
    self.lblResult.set_text(r.read())
  
  def restart(self, widget, data=None):
    w, r = os.popen2("fvwm -r")
    w.write(self.entry.get_text())
    w.close()
    self.lblResult.set_text(r.read())

  def __init__(self):
    self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    self.window.connect("destroy", self.destroy)
    self.window.connect("delete_event", self.delete_event)

    self.boxv = gtk.VBox(False, 0)
    self.window.add(self.boxv)
   
    self.boxh2 = gtk.HBox(False, 0)
    self.boxv.pack_start(self.boxh2, True, True, 0)
   
    self.label = gtk.Label("密码")
    self.boxh2.pack_start(self.label, True, True, 0)
   
    self.entry = gtk.Entry(255)
    self.entry.set_visibility(False)
    self.boxh2.pack_start(self.entry, True, True, 0)
   
    self.boxh1 = gtk.HBox(False, 0)
    self.boxv.pack_start(self.boxh1, True, True, 0)
   
    self.lblResult = gtk.Label("")
    self.boxv.pack_start(self.lblResult, True, True, 0)
    self.lblResult.show()
   
    self.btnShutdown = gtk.Button("关机")
    self.btnShutdown.connect("clicked", self.shutdown, None)
    self.boxh1.pack_start(self.btnShutdown, True, True, 0)
   
    self.btnReboot = gtk.Button("重启")
    self.btnReboot.connect("clicked", self.reboot, None)
    self.boxh1.pack_start(self.btnReboot, True, True, 0)
   
    self.btnRestart = gtk.Button("重新加载窗口")
    self.btnRestart.connect("clicked", self.restart, None)
    self.boxh1.pack_start(self.btnRestart, True, True, 0)

    self.label.show()
    self.entry.show()
    self.btnRestart.show()
    self.btnReboot.show()
    self.btnShutdown.show()
    self.boxh1.show()
    self.boxh2.show()
    self.boxv.show()
    self.window.show()
  

  def main(self):
    gtk.main()

baseWindow = BaseWindow()
baseWindow.main()
 楼主| 发表于 2005-11-17 09:43:24 | 显示全部楼层
呵呵,使用gksu代替sudo解决了~~~

不过还是奇怪,为什么用写管道无法向sudo的password写数据~~
回复 支持 反对

使用道具 举报

发表于 2005-11-18 14:23:40 | 显示全部楼层
俺的机器已经chmod 4755 /sbin/halt 了。关机时输密码太烦。搞个程序system("/sbin/poweroff")也容易。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表