output.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # -*- coding: utf-8 -*-
  2. """
  3. plan.output
  4. ~~~~~~~~~~~
  5. Output for Plan. This is used for cron job output redirection.
  6. :copyright: (c) 2014 by Shipeng Feng.
  7. :license: BSD, see LICENSE for more details.
  8. """
  9. from ._compat import string_types
  10. class Output(object):
  11. """The plan output class used for command line output redirection.
  12. """
  13. def __init__(self, output=None):
  14. self.output = output
  15. def __str__(self):
  16. if not self.output:
  17. return ''
  18. if isinstance(self.output, string_types):
  19. return self.from_string()
  20. elif isinstance(self.output, dict):
  21. return self.from_dict()
  22. else:
  23. raise TypeError("Illegal output value %s" % self.output)
  24. def from_string(self):
  25. if self.output == "null":
  26. return "> /dev/null 2>&1"
  27. return self.output
  28. def from_dict(self):
  29. stdout = self.output.get('stdout', '/dev/null')
  30. stderr = self.output.get('stderr', '/dev/null')
  31. if stdout == '/dev/null' and stderr == '/dev/null':
  32. return "> /dev/null 2>&1"
  33. elif stdout and stderr:
  34. return ">> {stdout} 2>> {stderr}".format(stdout=stdout,
  35. stderr=stderr)
  36. elif stdout:
  37. return ">> {stdout}".format(stdout=stdout)
  38. elif stderr:
  39. return "2>> {stderr}".format(stderr=stderr)
  40. else:
  41. return ''