when I discovered that Jython and Python treat command-line arguments differently.
So here's two scripts: -
foo.py
#!/usr/bin/python
import sys
a = sys.argv[0]
b = sys.argv[1]
c = sys.argv[2]
print a + " " + b + " " + c
import sys
a = sys.argv[0]
b = sys.argv[1]
c = sys.argv[2]
print a + " " + b + " " + c
bar.py
#!/usr/bin/python
import sys
a = sys.argv[1]
b = sys.argv[2]
c = sys.argv[3]
print a + " " + b + " " + c
import sys
a = sys.argv[1]
b = sys.argv[2]
c = sys.argv[3]
print a + " " + b + " " + c
and here's what happens when I run each of them in Python: -
python foo.py Hello World !
foo.py Hello World
python bar.py Hello World !
Hello World !
And now here's what happens when I run each of them in Jython: -
/opt/IBM/WebSphere/AppServer/bin/wsadmin.sh -conntype none -f foo.py Hello World !
WASX7357I: By request, this scripting client is not connected to any server process. Certain configuration and application operations will be available in local mode.
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[Hello, World, !]"
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[Hello, World, !]"
Hello World !
/opt/IBM/WebSphere/AppServer/bin/wsadmin.sh -conntype none -f bar.py Hello World !
WASX7357I: By request, this scripting client is not connected to any server process. Certain configuration and application operations will be available in local mode.
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[Hello, World, !]"
WASX7017E: Exception received while running file "bar.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<string>", line 7, in ?
IndexError: index out of range: 3
WASX7303I: The following options are passed to the scripting environment and are available as arguments that are stored in the argv variable: "[Hello, World, !]"
WASX7017E: Exception received while running file "bar.py"; exception information: com.ibm.bsf.BSFException: exception from Jython:
Traceback (innermost last):
File "<string>", line 7, in ?
IndexError: index out of range: 3
In other words, Python starts counting the arguments from one ( which seems quite logical ), where argument zero is the name of the script.
By contrast, Jython starts counting from zero, hence the exception when I run bar.py i.e. the script looks for an argument indexed 3 whereas it only received arguments 0, 1 and 2 - hence the index out of range error.
Interesting, eh ?
No comments:
Post a Comment