Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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)