But:
Le but premier était exécuter des commandes bash depuis une page web. Ceci est très simple en passant par PHP et son lot de commandes système style exec();. Mais ces commandes sont désactivée par le SAFE_MODE de PHP. Reste encore la possibilité exécuter des CGI si la configuration d’apache le permet.
Bref, un serveur XML-RPC répondait à ces attentes.
Mise en œuvre:
Le fichier server.py
import SocketServer from SimpleXMLRPCServer import SimpleXMLRPCServer,SimpleXMLRPCRequestHandler import sys import os # Threaded mix-in class AsyncXMLRPCServer(SocketServer.ThreadingMixIn,SimpleXMLRPCServer) : pass # Example class to be published class TestObject: def sysReq(self,data): return os.system(data) def pow(self, x, y): return pow(x, y) def add(self, x, y) : return x + y def divide(self, x, y): return float(x) / float(y) # Instantiate and bind to localhost:8080 server = AsyncXMLRPCServer(('localhost', 8080), SimpleXMLRPCRequestHandler) # Register example object instance server.register_instance(TestObject()) server.register_introspection_functions() # run! server.serve_forever()
Démarrage du serveur:
user@host: python server.py
Le fichier client.py
import xmlrpclib import sys s = xmlrpclib.ServerProxy('http://localhost:8080') print s.pow(2,3) # Returns 2**3 = 8 print s.add(2,3) # Returns 5 print s.div(5,2) # Returns 5//2 = 2 # Print list of available methods print s.system.listMethods() print s.sysReq(sys.argv[1])