Hi Tomer,
I want to get file from server to the client.
I configured the open function on the rpyc_classic.py but I didn't success
to call it from the other computer.
I got this error:
Can you help me?
Thanks
>>> remote = c.root.open("FILE")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\site-packages\rpyc\core\netref.py", line 150, in
__getattr__
return syncreq(self, consts.HANDLE_GETATTR, name)
File "C:\Python26\lib\site-packages\rpyc\core\netref.py", line 71, in
syncreq
return conn.sync_request(handler, oid, *args)
File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 441, in
sync_request
raise obj
AttributeError: 'SlaveService' object has no attribute 'exposed_open'
========= Remote Traceback (1) =========
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 305, in
_dispatch_request
res = self._HANDLERS[handler](self, *args)
File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 541, in
_handle_getattr
return self._access_attr(oid, name, (), "_rpyc_getattr",
"allow_getattr", getattr)
File "C:\Python26\lib\site-packages\rpyc\core\protocol.py", line 507, in
_access_attr
return accessor(obj, name, *args)
File "C:\Python26\lib\site-packages\rpyc\core\service.py", line 69, in
_rpyc_getattr
return getattr(self, name)
AttributeError: 'SlaveService' object has no attribute 'exposed_open'
"
בתאריך יום שלישי, 17 בפברואר 2009 14:52:05 UTC+2, מאת Tomer Filiba:
>
> nice, but you might want to check out rpyc/utils/classic.py -- it already
> has file transfer functionality :)
> it does require the classic mode, but assuming you can get a remote file
> object,
> you can just use shutil.copyfileobj (you should check out shutil, btw, if
> you're new to python)
>
> i.e.
>
> # == server ==
> class FileService(rpyc.Service):
> def exposed_open(self, filename, mode = "r"):
> return open(filename, mode)
>
> # == client ==
> c = rpyc.connect(host, port)
>
> # copy to client
> remote = c.root.open("/foo/bar")
> local = open("/tmp/foo/bar", "w")
> shutil.copyfileobj(remote, local)
>
> # copy to server
> local = open("/spam/bacon")
> remote = c.root.open("/tmp/spam/bacon", "w")
> shutil.copyfileobj(local, remote)
>
>
> hope it helps,
> -tomer
>
>
> On Tue, Feb 17, 2009 at 14:30, CinnamonDonkey <[email protected]
> <javascript:>> wrote:
>
>>
>> No worries! I worked it out :)
>>
>> SERVER SHOULD BE:
>>
>> class MyService( rpyc.Service ):
>> class exposed_FileTransfer( ):
>> def exposed_Open( self, filename ):
>> print "FILE TRANSFER OPEN FUNCTION CALLED - " + filename
>> return 0
>>
>> if __name__ == "__main__":
>> s = ThreadedServer( MyService, port = 1234, reuse_addr = True )
>> s.start()
>>
>>
>> CLIENT SHOULD BE:
>>
>> if __name__ == "__main__":
>> connection = rpyc.connect( options.serviceHostName,
>> options.servicePortNum )
>> tf = connection.root.FileTransfer()
>> tf.Open( "SPANKING~!!!" )
>>
>>
>>
>> On 17 Feb, 12:25, CinnamonDonkey <[email protected]>
>> wrote:
>> > I have written this on my server side:
>> >
>> > class MyService( rpyc.Service ):
>> > class exposed_FileTransfer( ):
>> > def exposed_Open( filename ):
>> > print "FILE TRANSFER OPEN FUNCTION CALLED - " + filename
>> > return 0
>> >
>> > if __name__ == "__main__":
>> > s = ThreadedServer( MyService, port = 1234, reuse_addr = True )
>> > s.start()
>> >
>> > But on my client side I can't figure how to call it. I have tried:
>> >
>> > if __name__ == "__main__":
>> > connection = rpyc.connect( options.serviceHostName,
>> > options.servicePortNum )
>> > connection.root.FileTransfer.Open( "SPANKING~!!!" )
>> >
>> > But I get the error:
>> >
>> > TypeError: unbounded method expose_Open() must be called with
>> > exposed_FileTransfer instance as first argument.
>> >
>> > eh? I tried:
>> >
>> > if __name__ == "__main__":
>> > connection = rpyc.connect( options.serviceHostName,
>> > options.servicePortNum )
>> > ft = connection.root.FileTransfer
>> > ft.Open( "SPANKING~!!!" )
>> >
>> > and that does not work... I'm confussed.
>> >
>> > Please help.
>> >
>> > On 17 Feb, 09:17, CinnamonDonkey <[email protected]>
>> > wrote:
>> >
>> > > Thanx for the reply RedBaron.
>> >
>> > > I agree, I don't think it is the best way of doing a file transfer but
>> > > based on my limited knowledge of Python and RPyC I'd rather spend my
>> > > time learning a few systems well than lots of systems badly. At least
>> > > that is my theory at the moment, everything is subject to change ;-).
>> >
>> > > I do need, RPC for some genuine tasks later so I figured this would be
>> > > a good starting point as it satisfies two goals. How to transfer my
>> > > file and how to use RPyC :-D.
>> >
>> > > I have to say, I am very impressed with this Python'ing lark... Oh
>> > > what I have been missing all these years ;-).
>> >
>> > > On 17 Feb, 09:05, redbaron <[email protected]> wrote:
>> >
>> > > > Are you sure that RPyC is a good way to do it? I'm not sure but try
>> to
>> > > > open file and then send file handler to remote service. As it said
>> in
>> > > > docs all objects are passed by reference, so reading from that
>> handler
>> > > > on remote side will actually make transfer from local machine to
>> > > > remote onee. I'm not sure will it work or not, but you could try it
>> =)
>> >
>> > > > f = open(/path/to/file,"rb")
>> > > > ... send of on remote side
>> > > > ....do f.read() on remote side.
>> >
>> > > > be careful that f.read() will allocate memory equal to file size, if
>> > > > its really big then try to read it chunk by chunk like:
>> >
>> > > > g = open("/path/where/to/write","wb")
>> > > > chunk = f.read(1024*1024)
>> > > > while chunk:
>> > > > g.write(chunk)
>> > > > chunk = f.read(1024*1024)
>> >
>> >
>>
>
>
>
> --
> An NCO and a Gentleman
>
--
---
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/d/optout.