Thank you, it helps a lot. I&#39;ve made a mistake in calling callRemote. <br><br><div class="gmail_quote">On Mon, Mar 29, 2010 at 4:51 PM, Peter Westlake <span dir="ltr">&lt;<a href="mailto:peter.westlake@pobox.com">peter.westlake@pobox.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><br>
<br>
On Mon, 29 Mar 2010 14:54 +0300, &quot;Vlad Shevchenko&quot;<br>
<div class="im">&lt;<a href="mailto:vlad.shevchenko@gmail.com">vlad.shevchenko@gmail.com</a>&gt; wrote:<br>
&gt; No one use AmpList?<br>
&gt;<br>
&gt; On Sat, Mar 27, 2010 at 11:45 PM, Vlad Shevchenko<br>
&gt; &lt;<a href="mailto:vlad.shevchenko@gmail.com">vlad.shevchenko@gmail.com</a><br>
&gt; &gt; wrote:<br>
&gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt; can&#39;t find any reference of how to use AmpList. What should be passed to<br>
&gt; &gt; callRemote? In command: arguments = Amp.List(...) or arguments = [(&#39;param&#39;,<br>
&gt; &gt; AmpList(...))]? Responder params?<br>
&gt; &gt;<br>
&gt; &gt; Please, advice some refs or examples.<br>
<br>
</div>Here&#39;s an example. I&#39;ve missed out the other arguments for clarity. The<br>
data being passed is a Unix-style environment string. It needs to be<br>
reformatted to make it suitable for passing in an AmpList, but that&#39;s<br>
just an implementation detail. It&#39;s because the AmpList requires the<br>
dictionary keys to be declared in advance, but I want to be able to pass<br>
environment variables whose names are only known at run-time. Your code<br>
might not need to do any of that.<br>
<br>
First, the command:<br>
<br>
  class RunCmd(amp.Command):<br>
      arguments = [...,<br>
                   (&#39;env&#39;,  amp.AmpList([(&#39;var&#39;, amp.String()), (&#39;val&#39;,<br>
                   amp.String())])),<br>
                   ...]<br>
<br>
<br>
Then the call:<br>
<br>
          # env is something like {&#39;PATH&#39;: &#39;/bin:/usr/bin&#39;, &#39;HOME&#39;:<br>
          &#39;/home/peter&#39;}<br>
          # It needs to be converted into a form suitable for AmpList,<br>
          like this:<br>
          # [{&#39;var&#39;: &#39;PATH&#39;, &#39;val&#39;: &#39;/bin:/usr/bin&#39;}, {&#39;var&#39;: &#39;HOME&#39;,<br>
          &#39;val&#39;: &#39;/home/peter&#39;}]<br>
          #<br>
          amp_env  = [{&#39;var&#39;: var, &#39;val&#39;: val} for (var, val) in<br>
          env.items()]<br>
          d = self.protocol.callRemote(commands.RunCmd, ...,<br>
          env=amp_env, ...)<br>
<br>
<br>
Then the responder:<br>
<br>
    def runcmd(..., env, ..):<br>
        &quot;&quot;&quot;Implementation of the AMP command RunCmd.<br>
        ...<br>
        &quot;&quot;&quot;<br>
<br>
        # The &quot;env&quot; argument represents the environment of a process.<br>
        # Convert it from the AmpList format back to a Python<br>
        dictionary.<br>
        #<br>
        envd = {}<br>
        for var in env:<br>
            envd[var[&#39;var&#39;]] = var[&#39;val&#39;]<br>
        ...<br>
        return {...}<br>
<br>
    commands.RunCmd.responder(runcmd)<br>
<br>
<br>
Peter.<br>
<br>
_______________________________________________<br>
Twisted-Python mailing list<br>
<a href="mailto:Twisted-Python@twistedmatrix.com">Twisted-Python@twistedmatrix.com</a><br>
<a href="http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python" target="_blank">http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>WBR, Vlad Shevchenko<br><br>