Watchdog: そのsetsidの使用のためにOSXでwatchmedo自動再起動が壊れています(OSError:[Errno 2]そのようなファイルまたはディレクトリはありません)

作成日 2015年07月19日  ·  7コメント  ·  ソース: gorakhargosh/watchdog

https://github.com/gorakhargosh/watchdog/pull/225/filesは追加setsid経由でコマンドを実行するときに呼び出しをauto-restart 。 このコマンドはOSXでは使用できません。

$ watchmedo auto-restart -- MY-COMMAND-HERE
Traceback (most recent call last):
  File "/Users/nickolay/temp-env/bin/watchmedo", line 9, in <module>
    load_entry_point('watchdog==0.8.3', 'console_scripts', 'watchmedo')()
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/watchdog/watchmedo.py", line 566, in main
    parser.dispatch()
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/argh/helpers.py", line 55, in dispatch
    return dispatch(self, *args, **kwargs)
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/argh/dispatching.py", line 174, in dispatch
    for line in lines:
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/argh/dispatching.py", line 277, in _execute_command
    for line in result:
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/argh/dispatching.py", line 231, in _call
    result = function(namespace_obj)
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/watchdog/watchmedo.py", line 541, in auto_restart
    handler.start()
  File "/Users/nickolay/temp-env/lib/python2.7/site-packages/watchdog/tricks/__init__.py", line 147, in start
    self.process = subprocess.Popen(self.command)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

https://docs.python.org/3/library/subprocess.htmlから判断すると

子の環境を変更する必要がある場合は、preexec_fnで行うのではなく、envパラメーターを使用してください。 start_new_sessionパラメーターは、以前に一般的に使用されていたpreexec_fnの代わりに、子でos.setsid()を呼び出すことができます。

...これは純粋なPythonで実行できる可能性があります(少なくともUnixでは)。 ウォッチドッグはPython2.6をサポートしているため、おそらくpreexec_fn代わりにstart_new_session preexec_fnを使用する必要があります。

最も参考になるコメント

ですから、同僚のためにこの問題を調べたときに、ほぼ1か月前の#329で自分の応答を見つけたので、次にこのページに出くわしたときに、それを修正するために何をしたかについて言及したいと思います。 ..

pip install git+https://github.com/gorakhargosh/watchdog.git

全てのコメント7件

次の2つの場所でhttps://github.com/gorakhargosh/watchdog/blob/master/src/watchdog/tricks/__init__.py#L125を変更すると、OS X10.9.5で機能します。

< 141        self.command = ['setsid'] + command
> 141        self.command = command

  146     def start(self):
< 147         self.process = subprocess.Popen(self.command, preexec_fn=os.setsid)
> 147         self.process = subprocess.Popen(self.command)

PR 225の元のケースではテストしなかったため、Windowsでは正しく機能しない可能性があります( os.setsidはサポートされていないようで、 os.killpgどのように機能するかわかりません)。

これはすでに#329で対処されています。

そうです、申し訳ありませんが、私がその問題をどのように見逃したのかわかりません。

Pythonパッケージはまだ更新されていません😭

はい、まだosxでこれを打っています

自動再起動はWindowsでも完全に壊れています。
os.setsidはそこでは利用できません。

ですから、同僚のためにこの問題を調べたときに、ほぼ1か月前の#329で自分の応答を見つけたので、次にこのページに出くわしたときに、それを修正するために何をしたかについて言及したいと思います。 ..

pip install git+https://github.com/gorakhargosh/watchdog.git

このページは役に立ちましたか?
0 / 5 - 0 評価