def ExecuteCommand(cmd, args=[], elevate=False, pword=wx.EmptyString): if elevate and pword.strip(u' \t\n') == wx.EmptyString: return (None, GT(u'Empty password')) CMD_sudo = GetExecutable(u'sudo') if not CMD_sudo: return (None, GT(u'Super user command (sudo) not available')) main_window = GetMainWindow() if isinstance(args, (unicode, str)): cmd_line = [ args, ] else: cmd_line = list(args) cmd_line.insert(0, cmd) main_window.Enable(False) # FIXME: Better way to execute commands if elevate: cmd_line.insert(0, u'sudo') cmd_line.insert(1, u'-S') cmd_line = u' '.join(cmd_line) cmd_output = os.popen(u'echo {} | {}'.format(pword, cmd_line)).read() else: cmd_output = subprocess.Popen(cmd_line, stdout=PIPE, stderr=PIPE) cmd_output.wait() main_window.Enable(True) stdout = wx.EmptyString if isinstance(cmd_output, subprocess.Popen): if cmd_output.stdout: stdout = cmd_output.stdout if cmd_output.stderr: if stdout == wx.EmptyString: stdout = cmd_output.stderr else: stdout = u'{}\n{}'.format(stdout, cmd_output.stderr) returncode = cmd_output.returncode else: stdout = cmd_output returncode = 0 return (returncode, stdout)
def Destroy(self, *args, **kwargs): # Re-enable parent/main window if previously disabled # ???: May not be necessary main_window = GetMainWindow() if not FieldEnabled(main_window): Logger.Debug(__name__, u'Re-enabling main window') main_window.Enable() if self.Parent and not FieldEnabled(self.Parent): Logger.Debug(__name__, u'Re-enabling parent') self.Parent.Enable() if wx.MAJOR_VERSION < 3: self.EndModal(0) return wx.ProgressDialog.Destroy(self, *args, **kwargs)