activescript .wsf

05/12/2008 - 23:21 von ekkehard.horner | Report spam
Unter Windows XP (Scriptsprachenversionen s.u.) kann ich mit einer
.wsf Datei:

- mixit.wsf
<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
<package>

<job id = "mixit">
<?job error = "true" debug = "true" ?>
<runtime>
<description>demonstriert die Mischung von Scriptsprachen</description>
</runtime>

<script language = "VBScript" src = "mixit.vbs" />
<script language = "JScript" src = "mixit.js" />
<script language = "Perlscript" src = "mixit.pl" />
<script language = "Python" src = "mixit.py" />

<script language = "VBScript">
<![CDATA[
'
############################################################################

WScript.Quit WhoIsWho()

'' stellt grundsàtzliches Vertrauen her
'
Function WhoIsWho()
WScript.Echo WScript.Scriptname, "WhoIsWho()"
WScript.Echo VBS_WhoAmI( 0 )
WScript.Echo JS_WhoAmI( 0 )
WScript.Echo PL_WhoAmI( 0 )
WScript.Echo PY_WhoAmI( 0 )
doMain00 = 0
End Function

'
############################################################################
]]>
</script>
</job>
</package>
- mixit.wsf

Funktionen aus den mit <script> geladenen Dateien ausfuehren:

- output
cscript mixit.wsf
mixit.wsf WhoIsWho()
VBScript 5.7 ( JScript 5.7 Perl v5.10.0 Python 2.6 )
JScript 5.7 ( VBScript 5.7 Perl v5.10.0 Python 2.6 )
Perl v5.10.0 ( VBScript 5.7 JScript 5.7 Python 2.6 )
Python 2.6 * win32 ( ? ? ? )
WARNING: Ignoring keyboard interrupt from ActiveScripting engine
- output

Die Warnung kann ich nur vermeiden, wenn ich in

C:\Python26\Lib\site-packages\win32comext\axscript\client\framework.py

die Zeilen 75ff

# and for the sake of working around something I can't understand...
# prevent keyboard interrupts from killing IIS
import signal
def noOp(a,b):
# it would be nice to get to the bottom of this, so a warning to
# the debug console can't hurt.
print "WARNING: Ignoring keyboard interrupt from ActiveScripting engine"

'verbessere':

...
# the debug console can't hurt.
# print "WARNING: Ignoring keyboard interrupt from ActiveScripting
engine"
pass

Gibt es einen weniger gewalttaetigen Weg?

Mein zweites Problem ist, dass ich von Python aus:

- mixit.py -
import sys

def PY_WhoAmI( nLevel ):
if 0 == nLevel:
return "Python %s * %s ( %s %s %s )" % (
sys.version.split(" ", 1)[0],
sys.platform,
# VBS_WhoAmi( 1 ),
# JS_WhoAmi( 1 ),
# PL_WhoAmi( 1 ),
"?",
"?",
"?",
)
else:
return "Python %s" % (sys.version.split(" ", 1)[0])
- mixit.py -

die Funktionen der anderen Sprachen nicht aufrufen kann:

File "<Script Block >", line 10, in PY_WhoAmI
VBS_WhoAmi( 1 ),
NameError: global name 'VBS_WhoAmi' is not defined

Kann man dagegen etwas tun?
 

Lesen sie die antworten

#1 Diez B. Roggisch
06/12/2008 - 11:41 | Warnen spam

- mixit.py -
import sys

def PY_WhoAmI( nLevel ):
if 0 == nLevel:
return "Python %s * %s ( %s %s %s )" % (
sys.version.split(" ", 1)[0],
sys.platform,
# VBS_WhoAmi( 1 ),
# JS_WhoAmi( 1 ),
# PL_WhoAmi( 1 ),
"?",
"?",
"?",
)
else:
return "Python %s" % (sys.version.split(" ", 1)[0])
- mixit.py -

die Funktionen der anderen Sprachen nicht aufrufen kann:

File "<Script Block >", line 10, in PY_WhoAmI
VBS_WhoAmi( 1 ),
NameError: global name 'VBS_WhoAmi' is not defined

Kann man dagegen etwas tun?



Es wuerde mich schon sehr wundern, wenn du Funktionen einfach so
aufrufen koenntest - woher soll Python die denn bitteschoen haben? Was
waere, wenn ein anderes Skript eine Funktion definiert die in den
builtins ist - wie kommt man an die ran, oder ueberschreibt die gar die
builtins?

Ich kenne den WSH nicht, aber ich wuerde doch mal vermuten das du einen
import machen musst, und darin wird dir dann eine Umgebung zur
Verfuegung gestellt, welche diese Funktionen enthaelt.

Im Netz findet man zb sowas hier:

import sys, win32com.client
shell = win32com.client.Dispatch("WScript.Shell")

Wie sieht denn zB das dazugehoerige Perl-Skript aus?


Diez

Ähnliche fragen