0

我正在 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 [OK] ... 等待,一旦 apache重新启动显示下一行 - Web server apache2 Restarted

我该如何解决这些问题 -

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

我对python完全陌生。提前致谢

4

1 回答 1

0

快速检查堆栈将我带到此链接;希望能帮助到你

管道子流程标准输出到变量

我也挖了这个:

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()
于 2013-10-31T19:10:28.390 回答