doit
doit copied to clipboard
Feature Request: Version of LongRunning that returns TaskError on non zero return code?
I'd love if there was a version of doit.tools.LongRunning that had it return TaskError if return code was non zero. I tend to use this for a light build system for tasks that have dependencies, and having it not stop at the first error requires a bunch of scrolling and buries problems.
I tend to unroll it in my own dodo.py scripts, but it'd be nice if it was inbuilt. I ended up hacking my own locally in my dodo.py and it works quite nicely:
class LongRunningTask(doit.tools.CmdAction):
' Run a command and wait for it to finish, and fail if it fails.'
def execute(self, out=None, err=None):
action = self.expand_action()
process = subprocess.Popen(
action, shell=self.shell, stdout=out, stderr=err, **self.pkwargs,)
try:
return_value = process.wait()
if return_value != 0:
return doit.exceptions.TaskError(f'Command failed with return code {return_value}')
except KeyboardInterrupt:
# normal way to stop interactive process
pass
The "Interactive" checks the return code. does that work for you?
The problem of having too many features/API is that people dont find them! So providing the building blocks to allow users to code their own solution is a good compromise. So I would tend to reject this...
I can respect having too many features/API - a big surface area means a lot more to maintain. :)
Interactive is close to what I want, but it doesn't capture output, unfortunately.