Q:

Is this the right way to run a shell script inside Python?

import subprocess
retcode = subprocess.call(["/home/myuser/go.sh", "abc.txt", "xyz.txt"])

When I run these 2 lines, will I be doing exactly this?:
/home/myuser/go.sh abc.txt xyz.txt

Why do I get this error? But when I run go.sh normally, I don't get that error.
File "/usr/lib/python2.6/subprocess.py", line 480, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error

A:

OSError: [Errno 8] Exec format error

This is an error reported by the operating system when trying to run /home/myuser/go.sh.
It looks to me like the shebang (#!) line of go.sh is not valid. 
Here's a sample script that runs from the shell but not from Popen:
#\!/bin/sh
echo "You've just called $0 $@."

Removing the \ from the first line fixes the problem.

A:

Change the code to following:
retcode = subprocess.call(["/home/myuser/go.sh", "abc.txt", "xyz.txt"], shell=True,)

Notice "shell=True"
From: http://docs.python.org/library/subprocess.html#module-subprocess

On Unix, with shell=True: If args is a
  string, it specifies the command
  string to execute through the shell.
  This means that the string must be
  formatted exactly as it would be when
  typed at the shell prompt.

A:

I recently ran into this problem with a script that looked like this:
% cat /tmp/test.sh
                              <-- Note the empty line
#!/bin/sh
mkdir /tmp/example

The script ran fine from the command line, but failed with
OSError: [Errno 8] Exec format error

when executed via
subprocess.Popen(['/tmp/test.sh']).communicate()

(The solution, of course, was to remove the empty line).

