类似xargs的守护进程接受来自任意进程的输入
xargsd的Python项目详细描述
类似于xargs
,但是接受来自任意进程的参数,并且只要有可用的参数就立即执行。
也就是说,当它接收到参数a
和b
时,将执行foobar a b
。如果参数c
到f
在执行foobar a b
时到达,那么foobar c d e f
将在第一次调用完成时运行。
示例
一个玩具示例,演示了非常基本的功能:
$ python -m xargsd --socket-file temp.sock -vvv -- echo&[1]14917 $ submit(){ python -m xargsd.client --socket-file temp.sock -- "$@";} $ submit a INFO:root:executing ['echo', 'a'] a $ submit b c d INFO:root:executing ['echo', 'b', 'c', 'd'] b c d
(请注意,
INFO:
行和以下行是由xargsd
打印的,而不是由客户端打印的。)一个稍微不那么有趣的例子,它演示了前一个命令执行时如何对命令进行批处理:
$ echo'date; sleep "$@"' > date-and-sleep.sh $ python -m xargsd --socket-file temp.sock -vvv -- bash date-and-sleep.sh &[4]15714 $ submit(){echo"submitting $@"; python -m xargsd.client --socket-file temp.sock -- "$@";} $ submit 1; sleep 0.1; submit 0.99; sleep 0.1; submit 1.01; sleep 3 submitting 1 INFO:root:executing ['bash', 'date-and-sleep.sh', '1'] Sun May 1209:53:13 PDT 2019 submitting 0.99 submitting 1.01 DEBUG:root:finished executing ['bash', 'date-and-sleep.sh', '1']: status 0 INFO:root:executing ['bash', 'date-and-sleep.sh', '0.99', '1.01'] Sun May 1209:53:14 PDT 2019 DEBUG:root:finished executing ['bash', 'date-and-sleep.sh', '0.99', '1.01']: status 0
一个非常严肃的例子,每当文件(其名称与某些模式匹配)更改时,使用
watchman
运行xargsd.client
:$ watchman watch . $ watchman -- trigger . pytest -p '.*\.py$' -X -p '(^|.*/)\.' -- bash -c 'python -m xargsd.client --socket-file .xargsd-pytest.sock -- .' $ python -m xargsd --unique --socket-file .xargsd-pytest.sock -vvv -- pytest --color=yes
然后保存一个
.py
文件并观察守护进程的执行pytest .