Просмотр исходного кода

Log stderr and stdout when running hook (Fixes #814)

Unrud 7 лет назад
Родитель
Сommit
b25e1f23c4
1 измененных файлов с 14 добавлено и 2 удалено
  1. 14 2
      radicale/storage.py

+ 14 - 2
radicale/storage.py

@@ -28,6 +28,7 @@ entry.
 import binascii
 import contextlib
 import json
+import logging
 import os
 import pickle
 import posixpath
@@ -1555,9 +1556,20 @@ class Collection(BaseCollection):
             hook = cls.configuration.get("storage", "hook")
             if mode == "w" and hook:
                 cls.logger.debug("Running hook")
-                subprocess.check_call(
+                debug = cls.logger.isEnabledFor(logging.DEBUG)
+                p = subprocess.Popen(
                     hook % {"user": shlex.quote(user or "Anonymous")},
-                    shell=True, cwd=folder)
+                    stdin=subprocess.DEVNULL,
+                    stdout=subprocess.PIPE if debug else subprocess.DEVNULL,
+                    stderr=subprocess.PIPE if debug else subprocess.DEVNULL,
+                    shell=True, universal_newlines=True, cwd=folder)
+                stdout_data, stderr_data = p.communicate()
+                if stdout_data:
+                    cls.logger.debug("Captured stdout hook:\n%s", stdout_data)
+                if stderr_data:
+                    cls.logger.debug("Captured stderr hook:\n%s", stderr_data)
+                if p.returncode != 0:
+                    raise subprocess.CalledProcessError(p.returncode, p.args)
 
 
 class FileBackedRwLock: