如何将终端输出变为python变量 - 用于规范的快速应用

时间:2013-10-31 18:52:18

标签: python-3.x ubuntu-12.10 canonical-quickly

我正在ubuntu 12.10上快速创建一个Ubuntu应用程序。它是一个用于启动,停止和重新启动Apache2 Web服务器的简单GUI。

让我先给出我面临问题的部分代码 -

    # handler for restart apache button    
    def on_button_restart_clicked(self, button):
        self.label = self.builder.get_object("labelStatus")
        self.label.set_text("Restarting web server apache2")
        os.system("gksudo /etc/init.d/apache2 restart")
        self.label.set_text("Web server apache2 Restarted")

单击该按钮后,将调用该方法,但标签未显示 - 重新启动Web服务器apache2 在终端中,此时的输出为 - *重新启动Web服务器apache2 [确定] ...等待,一旦重新启动apache,将显示下一行 - Web服务器apache2重新启动

我如何解决问题 -

  1. 我不想在标签文本中对消息进行硬编码。那么如何在终端输出上保持跟踪并将其捕获到python变量,以便我可以设置标签文本。
  2. 由于我正在使用gksudo,弹出窗口即将输入密码,但问题是它显示的是命令。我怎样才能在python中优雅地使用sudo?
  3. 我对python完全不熟悉。 提前致谢

1 个答案:

答案 0 :(得分:0)

Stack的快速检查将我带到了这个链接;希望它有所帮助

Pipe subprocess standard output to a variable

我也挖了这个:

from StringIO import StringIO 
import sys

# store a reference to the old
old_stdout = sys.stdout

# var to store everything that is sent to the std out
result = StringIO()
sys.stdout = result

# your function here; all results should be stored
user_def_function()

# reset the std out
sys.stdout = old_stdout

# result to string
result_string = result.getvalue()