from SimpleXMLRPCServer import * <br/>
from os import path<br/>
from code import InteractiveConsole as BaseInteractiveConsole<br/>
<br/>
class Stdout ( object ) :<br/>
""" stdout """ <br/>
def __init__ ( self ) :<br/>
self . buffer = '' <br/>
<br/>
def get_buffer ( self ) :<br/>
""" """ <br/>
bc = self . buffer <br/>
self . buffer = '' <br/>
return bc<br/>
<br/>
def write ( self , bs ) :<br/>
""" """ <br/>
self . buffer += bs<br/>
return len ( bs ) <br/>
<br/>
class InteractiveConsole ( BaseInteractiveConsole ) :<br/>
""" , """ <br/>
<br/>
def __init__ ( self , locals ) :<br/>
""" """ <br/>
BaseInteractiveConsole. __init__ ( self , locals ) <br/>
# <br/>
self . stdout = sys . stdout = sys . stderr = Stdout ( ) <br/>
<br/>
def push ( self , line ) :<br/>
result = BaseInteractiveConsole. push ( self , line ) <br/>
return ( result, self . stdout . get_buffer ( ) ) # <br/>
<br/>
<br/>
<br/>
class Server ( SimpleXMLRPCServer ) :<br/>
"""XMLRPC-, """ <br/>
<br/>
def __init__ ( self , ls, * args, ** kwargs ) :<br/>
SimpleXMLRPCServer . __init__ ( self , * args, ** kwargs ) <br/>
self . register_introspection_functions ( ) <br/>
# <br/>
self . register_instance ( InteractiveConsole ( ls ) )
from cmd import Cmd as BaseCmd<br/>
from code import InteractiveConsole as BaseInteractiveConsole<br/>
import re , sys <br/>
from xmlrpclib import ServerProxy<br/>
<br/>
class Cmd ( BaseCmd ) :<br/>
""" -""" <br/>
reg = re . compile ( '^ \s *' ) <br/>
def __init__ ( self , host, port ) : <br/>
BaseCmd. __init__ ( self ) <br/>
self . s = ServerProxy ( 'http://%s:%d' % ( host, int ( port ) ) ) # <br/>
self . prompt = '>>> ' # <br/>
self . leading_ws = '' # <br/>
self . is_empty = False # <br/>
<br/>
def precmd ( self , line ) :<br/>
""" ,<br/>
""" <br/>
# , .. default <br/>
self . leading_ws = self . reg . match ( line ) . group ( 0 ) <br/>
# , .. <br/>
self . is_empty = ( line == '' ) <br/>
return line # , <br/>
<br/>
def default ( self , line ) : <br/>
if ( self . is_empty ) : # y <br/>
line = '' <br/>
line = self . leading_ws + line # <br/>
( result, output ) = self . s . push ( line ) # <br/>
# <br/>
self . prompt = ( '... ' if result else '>>> ' ) <br/>
sys . stdout . write ( output ) # :) <br/>
<br/>
if __name__ == '__main__' :<br/>
HOST, PORT = sys . argv [ 1 : ] <br/>
Cmd ( HOST, PORT ) . cmdloop ( )
package net.rjyc ; <br/>
<br/>
import org.python.util.PythonInterpreter ; <br/>
import java.util.* ; <br/>
<br/>
public class Server { <br/>
private PythonInterpreter i ; <br/>
public PythonInterpreter getInterpreter ( ) { <br/>
return i ; <br/>
} <br/>
public Server ( String host, int port ) { <br/>
this ( host, port, new HashMap < String, Object > ( ) ) ; <br/>
} <br/>
public Server ( String host, int port, Map < String, Object > locals ) { <br/>
i = new PythonInterpreter ( ) ; <br/>
// <br/>
i. set ( "host" , host ) ; <br/>
i. set ( "port" , port ) ; <br/>
i. set ( "ls" , locals ) ; <br/>
} <br/>
<br/>
public void start ( ) { <br/>
// <br/>
i. exec ( "from rjyc import Server; Server(dict(ls), (host, port), logRequests = False).serve_forever()" ) ; <br/>
} <br/>
}
import javax.servlet.http.* ; <br/>
import java.util.* ; <br/>
import java.io.* ; <br/>
<br/>
public class Hello extends HttpServlet { <br/>
public final Map < String, String > links = new HashMap < String, String > ( ) ; <br/>
{ <br/>
links. put ( "Python" , "http://python.org" ) ; <br/>
links. put ( "Java" , "http://java.net" ) ; <br/>
} <br/>
@ Override protected void doGet ( HttpServletRequest request, HttpServletResponse response ) <br/>
throws IOException { <br/>
PrintWriter writer = response. getWriter ( ) ; <br/>
for ( Map . Entry < String, String > e: links. entrySet ( ) ) <br/>
writer. println ( "<a href= \" " +e. getValue ( ) + " \" >" +e. getKey ( ) + "</a>" ) ; <br/>
writer. close ( ) ; <br/>
} <br/>
}
siasia@siasia ~ % wget http://localhost:8080 -O - 2>/dev/null <a href="http://python.org">Python</a> <a href="http://java.net">Java</a>
import javax.servlet.http.* ; <br/>
import java.util.* ; <br/>
import java.io.* ; <br/>
import net.rjyc.Server ; <br/>
<br/>
public class Hello extends HttpServlet { <br/>
public final Map < String, String > links = new HashMap < String, String > ( ) ; <br/>
{ <br/>
links. put ( "Python" , "http://python.org" ) ; <br/>
links. put ( "Java" , "http://java.net" ) ; <br/>
Thread t = new Thread ( ) { <br/>
@ Override public void run ( ) { <br/>
Map < String, Object > locals = new HashMap < String, Object > ( ) ; <br/>
locals. put ( "this" , Hello. this ) ; <br/>
new Server ( "localhost" , 8081 , locals ) . start ( ) ; <br/>
} <br/>
} ; <br/>
t. start ( ) ; <br/>
} <br/>
@ Override protected void doGet ( HttpServletRequest request, HttpServletResponse response ) <br/>
throws IOException { <br/>
PrintWriter writer = response. getWriter ( ) ; <br/>
for ( Map . Entry < String, String > e: links. entrySet ( ) ) <br/>
writer. println ( "<a href= \" " +e. getValue ( ) + " \" >" +e. getKey ( ) + "</a>" ) ; <br/>
writer. close ( ) ; <br/>
} <br/>
}
siasia@siasia ~ % python client.py localhost 8081 >>> this examples.Hello@13ebc5c >>> this.links {Python=http://python.org, Java=http://java.net} >>> this.links['Scala'] = 'http://scala-lang.org' >>> this.links {Scala=http://scala-lang.org, Python=http://python.org, Java=http://java.net}
siasia@siasia ~ % wget http://localhost:8080 -O - 2>/dev/null <a href="http://scala-lang.org">Scala</a> <a href="http://python.org">Python</a> <a href="http://java.net">Java</a>
<repository> <id> Rjyc Repository </ id> <url> http://siasia.github.com/maven2 </ url> </ repository>
<dependency> <groupId> org.python </ groupId> <artifactId> rjyc </ artifactId> <version> 1.0-SNAPSHOT </ version> </ dependency>
import net.rjyc.Server;
python client.py [host] [port]
Source: https://habr.com/ru/post/129064/
All Articles