Otherwise we will block ourselves, waiting for the restart command to complete which it only can when we are no longer there. Should reduce restart times on update significantly. Downside is that we no longer can wait for the return code of the call. However, that should be caught by our UI handler timing out for the restart and showing an error prompting the user to restart manually.
27 lines
982 B
Python
27 lines
982 B
Python
# coding=utf-8
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
__author__ = "Gina Häußge <osd@foosel.net>"
|
|
__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
|
|
__copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License"
|
|
|
|
|
|
from .exceptions import ScriptError
|
|
|
|
|
|
def execute(command, cwd=None, evaluate_returncode=True, async=False):
|
|
import sarge
|
|
p = None
|
|
|
|
try:
|
|
p = sarge.run(command, cwd=cwd, stdout=sarge.Capture(), stderr=sarge.Capture(), async=async)
|
|
except:
|
|
returncode = p.returncode if p is not None else None
|
|
stdout = p.stdout.text if p is not None and p.stdout is not None else ""
|
|
stderr = p.stderr.text if p is not None and p.stderr is not None else ""
|
|
raise ScriptError(returncode, stdout, stderr)
|
|
|
|
if evaluate_returncode and p.returncode != 0:
|
|
raise ScriptError(p.returncode, p.stdout.text, p.stderr.text)
|
|
|
|
return p.returncode, p.stdout.text, p.stderr.text
|