Exécuter un script Pyton sur un serveur distant.
Le
Salvatore

Bonsoir la communauté,
Lorsque j'ai voulu distribuer mes scripts 'hta' en Python,
j'ai été confronté au problème de l'installation de Python
sur les postes clients.
Je n'ai eu aucun mal à convaincre les collègues de mon Bureau.
Le problème s'est présenté pour les postes sur les sites distants
Mais comment faire pour faire exécuter un script sur un serveur distant ?
La solution je l'ai trouvé ici :
http://www.voidspace.org.uk/ironpython/the_cpython_server.shtml
(regarder en bas de page)
Il me reste à trouver comment poster une requete 'POST' en vbs
Michel si tu as l'info :-)
Voici le code côté client réadapter
pour répondre à mon besoin.
[code]
# -*- coding: cp1252 -*-
import httplib
import base64
import urllib
host = '127.0.0.1'
port = 9981
script = """
import wmi
c = wmi.WMI('%s')
for os in c.Win32_OperatingSystem():
caption = os.Caption
response = caption
filename = 'foo'
"""
def execScript(server):
encodedScript = base64.encodestring(script%server)
headers = { "Content-type": "application/x-www-form-urlencoded"}
bytes = ','.join([str(ord(c)) for c in encodedScript])
params = urllib.urlencode({u'data': bytes})
con = httplib.HTTPConnection(host, port)
con.request('POST','/',params,headers)
response = con.getresponse()
con.close
return response.read()
if __name__ == '__main__':
osname = execScript('Python')
print osname
[/code]
Cordialement
Salvatore
# La partie serveur est ici :
# http://www.voidspace.org.uk/ironpython/the_cpython_server.shtml
# J'ai modifié la partie get_response method comme suit:
# def get_response(self, path, query, data):
# """
# Get a response file object, filename, and length (if known).
# Exceptions raised here will result in a 501 being sent.
# """
# print 'Path:', path
# print 'Query:', query
# d = data[5:]
# lst64 = d.split('%2C')
# d64 = ''.join([chr(int(c)) for c in lst64 ])
# src = base64.decodestring(d64)
# s = src[1:-1]
# context = {}
# exec (s + '', context)
# print "Fin exe : %s"%context['response']
# if not 'response' in context:
# raise NoResponseError("The script did not return a response.")
# response = context['response']
# responseName = context.get('filename', '')
# return StringIO(response), responseName, len(response)
Lorsque j'ai voulu distribuer mes scripts 'hta' en Python,
j'ai été confronté au problème de l'installation de Python
sur les postes clients.
Je n'ai eu aucun mal à convaincre les collègues de mon Bureau.
Le problème s'est présenté pour les postes sur les sites distants
Mais comment faire pour faire exécuter un script sur un serveur distant ?
La solution je l'ai trouvé ici :
http://www.voidspace.org.uk/ironpython/the_cpython_server.shtml
(regarder en bas de page)
Il me reste à trouver comment poster une requete 'POST' en vbs
Michel si tu as l'info :-)
Voici le code côté client réadapter
pour répondre à mon besoin.
[code]
# -*- coding: cp1252 -*-
import httplib
import base64
import urllib
host = '127.0.0.1'
port = 9981
script = """
import wmi
c = wmi.WMI('%s')
for os in c.Win32_OperatingSystem():
caption = os.Caption
response = caption
filename = 'foo'
"""
def execScript(server):
encodedScript = base64.encodestring(script%server)
headers = { "Content-type": "application/x-www-form-urlencoded"}
bytes = ','.join([str(ord(c)) for c in encodedScript])
params = urllib.urlencode({u'data': bytes})
con = httplib.HTTPConnection(host, port)
con.request('POST','/',params,headers)
response = con.getresponse()
con.close
return response.read()
if __name__ == '__main__':
osname = execScript('Python')
print osname
[/code]
Cordialement
Salvatore
# La partie serveur est ici :
# http://www.voidspace.org.uk/ironpython/the_cpython_server.shtml
# J'ai modifié la partie get_response method comme suit:
# def get_response(self, path, query, data):
# """
# Get a response file object, filename, and length (if known).
# Exceptions raised here will result in a 501 being sent.
# """
# print 'Path:', path
# print 'Query:', query
# d = data[5:]
# lst64 = d.split('%2C')
# d64 = ''.join([chr(int(c)) for c in lst64 ])
# src = base64.decodestring(d64)
# s = src[1:-1]
# context = {}
# exec (s + '', context)
# print "Fin exe : %s"%context['response']
# if not 'response' in context:
# raise NoResponseError("The script did not return a response.")
# response = context['response']
# responseName = context.get('filename', '')
# return StringIO(response), responseName, len(response)
Je dois avoir un truc dans un coin. Malheureusement, c'est trop tard
pour cette année (je pars réveillonner après quelques heures de
sommeil).
Si ça peut attendre l'année prochaine...
Bonne année !
MCI
J'ai trouvé
<html>
<head>
<script language=jscript>
var script2=" n
import wmi n
c = wmi.WMI('Python') n
for os in c.Win32_OperatingSystem(): n
caption = os.Caption n
response = caption n
filename = 'foo'"
var url = "http://127.0.0.1:9981";
var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP");
xmlhttp.open("POST", url, 0);
xmlhttp.send(script2);
alert(xmlhttp.responseText )
var xmlhttp = null;
</script>
</head>
<body>
test
</body>
</html>
Bonne Fête
Salvatore
technique avec XUL...;-)