Thanks very much. I success now to copy the file, on classic mode.
Now i want to change the method to service mode. (because security issues).
What I need to do for this?
On server I ran this file:
class DoStuffService(rpyc.Service):
def on_connect(self):
"Do some things when a connection is made"
def on_disconnect(self):
"Do some things AFTER a connection is dropped"
def exposed_func1(self, *args, **kws):
"Do something useful and maybe return a value"
def exposed_func2(self, *args, **kws):
"Like func1, but do something different"
if __name__ == '__main__':
rpyc.utils.server.ThreadedServer(DoStuffService).start()
On client I tried to connect such:
c = rpyc.connect(IP,PORT,service = "DoStuffService")
I get this error, why it can be?
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\site-packages\rpyc\utils\factory.py", line 89, in
connect
s = SocketStream.connect(host, port, ipv6 = ipv6, keepalive = keepalive)
File "C:\Python26\lib\site-packages\rpyc\core\stream.py", line 132, in
connect
return cls(cls._connect(host, port, **kwargs))
File "C:\Python26\lib\site-packages\rpyc\core\stream.py", line 102, in
_connect
s.connect(sockaddr)
File "<string>", line 1, in connect
socket.error: [Errno 10061] No connection could be made because the target
machine actively refused it
בתאריך יום רביעי, 10 בספטמבר 2014 08:02:07 UTC+3, מאת Tomer Filiba:
>
> Use c.builtin.open (or builtins, can't remember), not c.root.open
> On Sep 10, 2014 1:05 AM, "Yehonatan Arad" <[email protected] <javascript:>>
> wrote:
>
>> 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]
>>> > 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] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
--
---
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.