|
|
|
|
|
|
|
Examples
|
|
|
|
========
|
|
|
|
|
|
|
|
|
|
|
|
Recursively Nested Bootstrap
|
|
|
|
----------------------------
|
|
|
|
|
|
|
|
This demonstrates the library's ability to use slave contexts to recursively
|
|
|
|
proxy connections to additional slave contexts, with a uniform API to any
|
|
|
|
slave, and all features (function calls, import forwarding, stdio forwarding,
|
|
|
|
log forwarding) functioning transparently.
|
|
|
|
|
|
|
|
This example uses a chain of local contexts for clarity, however SSH and sudo
|
|
|
|
contexts work identically.
|
|
|
|
|
|
|
|
nested.py:
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
import os
|
|
|
|
import mitogen.utils
|
|
|
|
|
|
|
|
@mitogen.utils.run_with_router
|
|
|
|
def main(router):
|
|
|
|
mitogen.utils.log_to_file()
|
|
|
|
|
|
|
|
context = None
|
|
|
|
for x in range(1, 11):
|
|
|
|
print 'Connect local%d via %s' % (x, context)
|
|
|
|
context = router.local(via=context, name='local%d' % x)
|
|
|
|
|
|
|
|
context.call(os.system, 'pstree -s python -s mitogen')
|
|
|
|
|
|
|
|
|
|
|
|
Output:
|
|
|
|
|
|
|
|
.. code-block:: shell
|
|
|
|
|
|
|
|
$ python nested.py
|
|
|
|
Connect local1 via None
|
|
|
|
Connect local2 via Context(1, 'local1')
|
|
|
|
Connect local3 via Context(2, 'local2')
|
|
|
|
Connect local4 via Context(3, 'local3')
|
|
|
|
Connect local5 via Context(4, 'local4')
|
|
|
|
Connect local6 via Context(5, 'local5')
|
|
|
|
Connect local7 via Context(6, 'local6')
|
|
|
|
Connect local8 via Context(7, 'local7')
|
|
|
|
Connect local9 via Context(8, 'local8')
|
|
|
|
Connect local10 via Context(9, 'local9')
|
|
|
|
18:14:07 I ctx.local10: stdout: -+= 00001 root /sbin/launchd
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+= 08126 dmw /Applications/iTerm.app/Contents/MacOS/iTerm2
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+= 10638 dmw /Applications/iTerm.app/Contents/MacOS/iTerm2 --server bash --login
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+= 10639 dmw bash --login
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+= 13632 dmw python nested.py
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13633 dmw mitogen:dmw@Eldil.local:13632
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13635 dmw mitogen:dmw@Eldil.local:13633
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13637 dmw mitogen:dmw@Eldil.local:13635
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13639 dmw mitogen:dmw@Eldil.local:13637
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13641 dmw mitogen:dmw@Eldil.local:13639
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13643 dmw mitogen:dmw@Eldil.local:13641
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13645 dmw mitogen:dmw@Eldil.local:13643
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13647 dmw mitogen:dmw@Eldil.local:13645
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13649 dmw mitogen:dmw@Eldil.local:13647
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13651 dmw mitogen:dmw@Eldil.local:13649
|
|
|
|
18:14:07 I ctx.local10: stdout: \-+- 13653 dmw pstree -s python -s mitogen
|
|
|
|
18:14:07 I ctx.local10: stdout: \--- 13654 root ps -axwwo user,pid,ppid,pgid,command
|