On Dec 16 2008, 5:11 pm, "Gabriel Genellina" <gagsl-...@yahoo.com.ar> wrote: > En Tue, 16 Dec 2008 17:21:35 -0200, Andrew <andrew.replo...@gmail.com> > escribió: > > > > > On Dec 16, 12:50 pm, Christian Heimes <li...@cheimes.de> wrote: > >> Andrew schrieb: > > >> > I'm running into a strange situation with getting incorrect > >> > returncodes / exit status from python subprocess.call. I'm using a > >> > python script (runtime 2.6.1 on windows) to automate the deploy of > >> > java applications to glassfish application server. Below is an example > > > I've removed shell=True, unfortunately, if I structure the call like: > > > call(["c:/glassfish/bin/asadmin.bat", "list-system-properties", "-- > > host > > mydomain", "--port 4848", "--user admin", "server-01"]) > > > It doesn't seem to recognize any arguments after list-system- > > properties. > > Should be: > > call(["c:/glassfish/bin/asadmin.bat", "list-system-properties", "--host", > "mydomain", "--port", "4848", "--user", "admin", "server-01"]) > > *Every* argument should be an item in the list (your way, "--port 4848" > becomes a single argument, not two: option plus value) > (This is independent of your other issue) > > > If I structure it like: > > > call("c:/glassfish/bin/asadmin.bat "+"list-system-properties --host > > mydomain --port 4848 --user admin server-01") > > > Then it executes correctly but still gives invalid returncode of 0 > > when it fails instead of 1. > > A similar example works fine for me: > > C:\temp>type ret.c > #include <stdlib.h> > > int main(int argc, char* argv[]) > { > return atoi(argv[1]); > > } > > C:\temp>ret 5 > > C:\temp>echo %errorlevel% > 5 > > C:\temp>type testret.bat > ret %1 > > C:\temp>testret 3 > > C:\temp>ret 3 > > C:\temp>echo %errorlevel% > 3 > > C:\temp>type testret.py > from subprocess import call > ret = call(["testret.bat", "42"]) > print "testret.bat exit code =", ret > > C:\temp>python testret.py > > C:\temp>ret 42 > testret.bat exit code = 42 > > C:\temp>python -V > Python 2.6 > > C:\temp>ver > > Microsoft Windows XP [Versión 5.1.2600] > > -- > Gabriel Genellina
I've tried this several ways now. It seems to be something specific with python and asadmin.bat. I've tried the following manually in the cmd.exe prompt: ------ C:\temp>c:\glassfish\bin\asadmin.bat list-system-properties Instance-01 .... properties here .... Command list-system-properties executed successfully. C:\temp>echo %errorlevel% 0 C:\temp>c:\glassfish\bin\asadmin.bat list-system-properties Instance-05 //note that Instance-05 does not exist Cannot determine type for target : Instance-05 CLI137 Command list-system-properties failed. C:\temp>echo %errorlevel% 1 C:\temp>ping 019293.com Ping request could not find host 019293.com. Please check the name and try again . C:\temp>echo %errorlevel% 1 C:\temp>ping google.com Pinging google.com [74.125.45.100] with 32 bytes of data: Reply from 74.125.45.100: bytes=32 time=48ms TTL=234 Reply from 74.125.45.100: bytes=32 time=66ms TTL=234 Reply from 74.125.45.100: bytes=32 time=63ms TTL=234 Reply from 74.125.45.100: bytes=32 time=44ms TTL=234 Ping statistics for 74.125.45.100: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 44ms, Maximum = 66ms, Average = 55ms C:\temp>echo %errorlevel% 0 ---------------------------------------- Then I tried the following in python (2.6.1) ---script--- import subprocess import sys try: retcode = subprocess.call(["ping","019293.com"]) if retcode < 0: print >>sys.stderr, "Child was terminated by signal", -retcode else: print >>sys.stderr, "Child returned", retcode except OSError, e: print >>sys.stderr, "Execution failed:", e try: retcode = subprocess.call(["ping","google.com"]) if retcode < 0: print >>sys.stderr, "Child was terminated by signal", -retcode else: print >>sys.stderr, "Child returned", retcode except OSError, e: print >>sys.stderr, "Execution failed:", e try: retcode = subprocess.call(["c:/glassfish/bin/asadmin.bat","list- system-properties","Instance-01"], shell=False) if retcode < 0: print >>sys.stderr, "Child was terminated by signal", -retcode else: print >>sys.stderr, "Child returned", retcode except OSError, e: print >>sys.stderr, "Execution failed:", e try: retcode = subprocess.call(["c:/glassfish/bin/asadmin.bat","list- system-properties","Instance-05"], shell=False) if retcode < 0: print >>sys.stderr, "Child was terminated by signal", -retcode else: print >>sys.stderr, "Child returned", retcode except OSError, e: print >>sys.stderr, "Execution failed:", e ---script--- Executed Output: ---output--- C:\temp>c:\Python26\python.exe example2.py Ping request could not find host 019293.com. Please check the name and try again. Child returned 1 Pinging google.com [74.125.67.100] with 32 bytes of data: Reply from 74.125.67.100: bytes=32 time=244ms TTL=239 Reply from 74.125.67.100: bytes=32 time=244ms TTL=239 Reply from 74.125.67.100: bytes=32 time=191ms TTL=234 Reply from 74.125.67.100: bytes=32 time=59ms TTL=239 Ping statistics for 74.125.67.100: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 59ms, Maximum = 244ms, Average = 184ms Child returned 0 ...glassfish properties for Instance-01 display here... Command list-system-properties executed successfully. Child returned 0 Cannot determine type for target : Instance-05 CLI137 Command list-system-properties failed. Child returned 0 C:\temp> ---output--- Notice how python never gets the correct returncode from asadmin.bat but I can get the correct returncode from the shell every time. Can anyone tell me why Python wouldn't be able to get the correct returncode for asadmin? TIA, Andrew -- http://mail.python.org/mailman/listinfo/python-list