[GRASS-dev] usage of subprocess.call

Greetings

In a Python script I'm using this to run an external BIN:
p=subprocess.call(command) where command is my command to run the bin. p will be equal tot he return values of the bin.
(so far so good)
But I'm getting an error now while running bin:
File "C:/EIS/scripts/mycopy", line 577, in
<module>
   main()
File "C:/EIS/scripts/mycopy", line 278, in main
   p=subprocess.call(command)
File "C:\EIS\Python25\lib\subprocess.py", line 444, in
call
   return Popen(*popenargs, **kwargs).wait()
File "C:\EIS\Python25\lib\subprocess.py", line 594, in
__init__
   errread, errwrite)
File "C:\EIS\Python25\lib\subprocess.py", line 816, in
_execute_child
   startupinfo)
WindowsError: [Error 193]

My problem is not the error but, is there a way to "get" the error and stop the process in a more smoother way instead of stopping so drastically?

Thanks
Antonio

__________ Information from ESET NOD32 Antivirus, version of virus signature database 6286 (20110712) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com

António Rocha wrote:

Greetings

In a Python script I'm using this to run an external BIN:
p=subprocess.call(command) where command is my command to run the bin. p
will be equal tot he return values of the bin.
(so far so good)
But I'm getting an error now while running bin:
File "C:/EIS/scripts/mycopy", line 577, in
<module>
   main()
File "C:/EIS/scripts/mycopy", line 278, in main
   p=subprocess.call(command)
File "C:\EIS\Python25\lib\subprocess.py", line 444, in
call
   return Popen(*popenargs, **kwargs).wait()
File "C:\EIS\Python25\lib\subprocess.py", line 594, in
__init__
   errread, errwrite)
File "C:\EIS\Python25\lib\subprocess.py", line 816, in
_execute_child
   startupinfo)
WindowsError: [Error 193]

My problem is not the error but, is there a way to "get" the error and
stop the process in a more smoother way instead of stopping so drastically?

According to MSDN:

  http://msdn.microsoft.com/en-us/library/ms681382(v=vs.85).aspx

  ERROR_BAD_EXE_FORMAT %1 is not a valid Win32 application.
  193 (0xC1)

Note that if you want to run something other than a binary executable,
you have to use pass shell=True to subprocess.call.

As for catching the exception, use e.g.:

  try:
      p = subprocess.call(...)
      ...
  except OSError, e:
      # deal with exception

WindowsError is a subclass of OSError; catching OSError will be more
portable. If you need to catch "all" errors, use StandardError, which
is the base class of "real" errors (it doesn't include non-error
exceptions such as Warning, StopIteration, SystemExit, etc).

--
Glynn Clements <glynn@gclements.plus.com>