you need to configure allow_public_attrs/allow_all_attrs on the server
side. this means that when you start the server, you need to pass *
protocol_config*= {"allow_public_attrs":True}

see
http://rpyc.readthedocs.org/en/latest/api/core_protocol.html#rpyc.core.protocol.DEFAULT_CONFIG
and
http://rpyc.readthedocs.org/en/latest/api/utils_server.html#rpyc.utils.server.Server

-tomer


-----------------------------------------------------------------

*Tomer Filiba*
tomerfiliba.com     <http://www.facebook.com/tomerfiliba>
<http://il.linkedin.com/in/tomerfiliba>


On Tue, Feb 26, 2013 at 9:11 AM, Jack Peng <[email protected]> wrote:

>
> why can't  use items for dict object ?
>
> thanks.
>
> [root@deploy client]# python client.py
> type(s)  :  <netref class '__builtin__.dict'>
> print dir(s):  ['__class__', '__cmp__', '__contains__', '__delattr__',
> '__delitem__', '__doc__', '__eq__', '__format__', '__ge__',
> '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__',
> '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__',
> '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__',
> '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys',
> 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys',
> 'pop', 'popitem', 'setdefault', 'update', 'values']
> print s:   {'10.216.250.230': ' 15:04:41 up 41 days, 22:47,  2 users,
> load average: 0.00, 0.00, 0.00\nUSER     TTY      FROM              LOGIN@
> IDLE   JCPU   PCPU WHAT\nroot     pts/0    10.1.206.16      14:04   52:17
> 0.24s  0.15s python server.p\nroot     pts/1    10.1.206.16      14:12
> 52:11   0.03s  0.03s -bash', '127.0.0.1': ' 15:04:33 up 36 days,  3:50,
> 7 users,  load average: 0.00, 0.00, 0.00\nUSER     TTY
> FROM              LOGIN@   IDLE   JCPU   PCPU WHAT\nroot     pts/0
> 10.1.206.16      09:20    3:29   1.87s  1.79s vim proxy.py\nroot
> pts/1    10.1.206.16      09:20    1:04m  0.09s  0.05s vim
> server.py\nroot     pts/2    10.1.206.16      09:27   38:51   0.29s  0.29s
> python\nroot     pts/3    10.1.206.16      13:45    1:04m  0.19s  0.18s
> python server.p\nroot     pts/4    10.1.206.16      13:46    1:04m  0.21s
> 0.19s python proxy.py\nroot     pts/5    10.1.206.16      13:50   32.00s
> 0.38s  0.37s vim client.py\nroot     pts/6    10.1.206.16      13:50
> 0.00s  0.17s  0.11s python client.p'}
> Traceback (most recent call last):
>   File "client.py", line 24, in <module>
>     for k,v in s.items():
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/netref.py",
> line 150, in __getattr__
>     return syncreq(self, consts.HANDLE_GETATTR, name)
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/netref.py",
> line 71, in syncreq
>     return conn.sync_request(handler, oid, *args)
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/protocol.py",
> line 438, in sync_request
>     raise obj
> AttributeError: cannot access 'items'
>
> ========= Remote Traceback (1) =========
> Traceback (most recent call last):
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/protocol.py",
> line 300, in _dispatch_request
>     res = self._HANDLERS[handler](self, *args)
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/protocol.py",
> line 538, in _handle_getattr
>     return self._access_attr(oid, name, (), "_rpyc_getattr",
> "allow_getattr", getattr)
>   File
> "/usr/lib/python2.6/site-packages/rpyc-3.2.3-py2.6.egg/rpyc/core/protocol.py",
> line 501, in _access_attr
>     raise AttributeError("cannot access %r" % (name,))
> AttributeError: cannot access 'items'
>
>
> ====================  CODE ================
> server.py  code
> class ProxyServer(Service):
>
>     def RunSingleJob(self,CMD=None,LIST=None):
>         result = {}
>         for h in LIST:
>             try:
>                 c = connect(h,20000)
>                 result[h] = c.root.ExecCmd(CMD)
>                 c.close()
>             except Exception,e:
>                 print e
>         return result
>
>
>     def exposed_MadeJob(self,CMD=None,LIST=None,TYPE=0):
>         if TYPE == 0:
>             ## single sys command
>             return self.RunSingleJob(CMD,LIST)
>
>         if TYPE == 1:
>             ## mulit sys command
>
>             return self.RunMultiJob(CMD,LIST)
>
>         if TYPE == 2:
>             ## define batch command for a job
>             pass
>
> s = ThreadedServer(ProxyServer,port=20001)
> s.start()
> ---------------------------------------
> client.py code
>
> Host = '127.0.0.1'
> Port = 20001
>
>
> HostList = ['127.0.0.1','10.216.250.230']
> Type = 0
> cmd = "w"
>
> result = {}
> c = rpyc.connect(Host,Port)
>
> s = c.root.MadeJob(CMD=cmd,LIST=HostList,TYPE=Type)
>
> print type(s)
> print dir(s)
>
> print s
>
> for k,v in s.items():
>     print "Host : %s " % k
>     print "[ %s ]" % v
>
> c.close()
>
>
>  --
>
> ---
> You received this message because you are subscribed to the Google Groups
> "rpyc" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"rpyc" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to