You can easily redirect IO from the interpreter itself, not from a process you spawn. On Jul 22, 2014 12:12 AM, "cappy" <[email protected]> wrote:
> > Tomer, > > I took that example from the Rpyc wiki, but you're telling me that it > won't work. > If it won't work, why is it on the wiki? :-) > > The RPYC examples seem to be inconsistent with Rpyc's capabilities. > Can we get some working examples? > > >>you might also want to check out plumbum for this use case: > http://plumbum.readthedocs.org/en/latest/ > <http://www.google.com/url?q=http%3A%2F%2Fplumbum.readthedocs.org%2Fen%2Flatest%2F&sa=D&sntz=1&usg=AFQjCNG3xZg5_dkkAriTM5jk4wOI9NnInA> > It doesn't seem like plumbum is right for me. I'm not making a cmd line > util. > > I'm just trying to run the python interpreter interactively, but remotely. > It seems like Rpyc should be able to redirect I/O from another machine, > but I'm not able > to get that working yet. > > On Sunday, July 20, 2014 1:05:31 PM UTC-7, Tomer Filiba wrote: >> >> well, you have to put that man-in-the-middle communicate() or something >> similar: reading the pipes and redirecting the output to their local >> counterparts. btw, you might also want to check out plumbum for this use >> case: http://plumbum.readthedocs.org/en/latest/ >> >> as for the second version, >> >> proc = conn.modules.subprocess.Popen("ls", stdout = sys.stdout, stderr = >> sys.stdin) >> >> it won't work because rpyc can't fool the OS. internally, popen dup()s >> the file handles and does the necessary witchcraft for pipe redirection >> (which is different under windows, but still involves the OS). the objects >> you passed are files in the local process, but only proxies to files in the >> remote side. the actual error you get is meaningless, the problem is it's >> simply not possible. >> >> >> >> -tomer >> >> ----------------------------------------------------------------- >> >> *Tomer Filiba* >> tomerfiliba.com <http://www.facebook.com/tomerfiliba> >> <http://il.linkedin.com/in/tomerfiliba> >> >> >> On Fri, Jul 18, 2014 at 12:17 AM, Tony Cappellini <[email protected]> >> wrote: >> >>> >>> Would someone point me to a better example of redirection stdio- >>> so that I don't need to do this? >>> >>> proc = conn.modules.subprocess.Popen("ls", stdout = -1, stderr = -1)stdout, >>> stderr = proc.communicate()print stdout.split() >>> >>> >>> http://rpyc.readthedocs.org/en/latest/docs/classic.html#classic >>> >>> If we are running a script on another machine, having to do >>> >>> stdout, stderr = proc.communicate()print stdout.split() >>> >>> is not very helpful. >>> >>> Ideally, what the user experiences on the remote machine, should >>> >>> be seen on the local machine. >>> >>> For some reason, >>> >>> proc = conn.modules.subprocess.Popen("ls", stdout = sys.stdout, stderr = >>> sys.stdin) >>> >>> causes a terrible exception. >>> >>> I don't understand this >>> >>> >>> proc=conn.modules.subprocess.Popen("dir",stdout=sys.stdout, >>> stderr=sys.stderr) >>> Traceback (most recent call last): >>> File "<stdin>", line 1, in <module> >>> File "C:\Python27\Lib\site-packages\rpyc\core\netref.py", line 196, >>> in __call__ >>> return syncreq(_self, consts.HANDLE_CALL, args, kwargs) >>> File "C:\Python27\Lib\site-packages\rpyc\core\netref.py", line 71, in >>> syncreq >>> return conn.sync_request(handler, oid, *args) >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 441, >>> in sync_request >>> raise obj >>> AttributeError: 'file' object has no attribute '__eq__' >>> >>> ========= Remote Traceback (2) ========= >>> Traceback (most recent call last): >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 305, >>> in _dispatch_request >>> res = self._HANDLERS[handler](self, *args) >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 535, >>> in _handle_call >>> return self._local_objects[oid](*args, **dict(kwargs)) >>> File "C:\Python27\lib\subprocess.py", line 701, in __init__ >>> errread, errwrite), to_close = self._get_handles(stdin, stdout, >>> stderr) >>> File "C:\Python27\lib\subprocess.py", line 842, in _get_handles >>> elif stdout == PIPE: >>> File "C:\Python27\Lib\site-packages\rpyc\core\netref.py", line 210, >>> in method >>> return syncreq(_self, consts.HANDLE_CALLATTR, name, args, kwargs) >>> File "C:\Python27\Lib\site-packages\rpyc\core\netref.py", line 71, in >>> syncreq >>> return conn.sync_request(handler, oid, *args) >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 441, >>> in sync_request >>> raise obj >>> AttributeError: 'file' object has no attribute '__eq__' >>> >>> ========= Remote Traceback (1) ========= >>> Traceback (most recent call last): >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 305, >>> in _dispatch_request >>> res = self._HANDLERS[handler](self, *args) >>> File "C:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 547, >>> in _handle_callattr >>> return self._handle_getattr(oid, name)(*args, **dict(kwargs)) >>> File "C:\Python27\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:\Python27\Lib\site-packages\rpyc\core\protocol.py", line 507, >>> in _access_attr >>> return accessor(obj, name, *args) >>> AttributeError: 'file' object has no attribute '__eq__' >>> >>> >>> >>> -- >>> >>> --- >>> 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. >>> >> >> -- > > --- > 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. > -- --- 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.
