You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have 'watchmedo shell-command' automatically run tests when I save files in my IDE. When I save several files simultaneously, I was getting multiple processes - one per file.
the --wait option prevents multiple processes from running in parallel, but my tests still run multiple times in series, which is also not what I want.
Here's a patch that adds a "--no-parallel" argument. This causes events that arrive while a process is still running to be silently ignored, which is the behaviour that I need.
Patch follows:
diff --git a/src/watchdog/tricks/__init__.py b/src/watchdog/tricks/__init__.py
index d129178..c15f672 100644
--- a/src/watchdog/tricks/__init__.py
+++ b/src/watchdog/tricks/__init__.py
@@ -78,14 +78,20 @@ class ShellCommandTrick(Trick):
"""Execeutes shell commands in response to matched events."""
def __init__(self, shell_command=None, patterns=None, ignore_patterns=None,
- ignore_directories=False, wait_for_process=False):
+ ignore_directories=False, wait_for_process=False,
+ no_parallel_processes=False):
super(ShellCommandTrick, self).__init__(patterns, ignore_patterns,
ignore_directories)
self.shell_command = shell_command
self.wait_for_process = wait_for_process
+ self.no_parallel_processes = no_parallel_processes
+ self.process = None
def on_any_event(self, event):
from string import Template
+
+ if self.no_parallel_processes and self.process and self.process.poll() is None:
+ return
if event.is_directory:
object_type = 'directory'
@@ -111,9 +117,9 @@ class ShellCommandTrick(Trick):
command = self.shell_command
command = Template(command).safe_substitute(**context)
- process = subprocess.Popen(command, shell=True)
+ self.process = subprocess.Popen(command, shell=True)
if self.wait_for_process:
- process.wait()
+ self.process.wait()
class AutoRestartTrick(Trick):
diff --git a/src/watchdog/watchmedo.py b/src/watchdog/watchmedo.py
index 53ff21f..e798264 100755
--- a/src/watchdog/watchmedo.py
+++ b/src/watchdog/watchmedo.py
@@ -416,6 +416,11 @@ Example option usage::
action='store_true',
default=False,
help="wait for process to finish to avoid multiple simultaneous instances")
+@arg('-n', '--no-parallel',
+ dest='no_parallel_processes',
+ action='store_true',
+ default=False,
+ help="Ignore events that happen while the previous process is still running")
def shell_command(args):
"""
Subcommand to execute shell commands in response to file system events.
@@ -435,7 +440,8 @@ def shell_command(args):
patterns=patterns,
ignore_patterns=ignore_patterns,
ignore_directories=args.ignore_directories,
- wait_for_process=args.wait_for_process)
+ wait_for_process=args.wait_for_process,
+ no_parallel_processes=args.no_parallel_processes)
observer = Observer(timeout=args.timeout)
observe_with(observer, handler, args.directories, args.recursive)
The text was updated successfully, but these errors were encountered:
cro
added a commit
to cro/watchdog
that referenced
this issue
Mar 28, 2014
Hi,
I have 'watchmedo shell-command' automatically run tests when I save files in my IDE. When I save several files simultaneously, I was getting multiple processes - one per file.
the --wait option prevents multiple processes from running in parallel, but my tests still run multiple times in series, which is also not what I want.
Here's a patch that adds a "--no-parallel" argument. This causes events that arrive while a process is still running to be silently ignored, which is the behaviour that I need.
Patch follows:
The text was updated successfully, but these errors were encountered: