Trouble with subprocess.call(...) and zsh script (OSError: [Errno 8] Exec format error)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Michael  George Lerner

    Trouble with subprocess.call(...) and zsh script (OSError: [Errno 8] Exec format error)

    Hi,

    (Python 2.5, OS X 10.4.10)
    I have a program called pdb2pqr on my system. It is installed so that
    "pdb2pqr" is in my path and looks like:

    #\!/bin/zsh -f
    /sw/share/pdb2pqr/pdb2pqr.py "$@"

    When I call it via this script:

    #!/usr/bin/env python
    import subprocess
    import tempfile
    args = ('/sw/bin/pdb2pqr','--help')
    output_file = tempfile.Tempor aryFile(mode="w +")
    print "Running",a rgs
    retcode =
    subprocess.call (args,stdout=ou tput_file.filen o(),stderr=subp rocess.STDOUT)
    output_file.clo se()

    I get this error:

    localhost~/tmp$ ./x.py
    Running ('/sw/bin/pdb2pqr', '--help')
    Traceback (most recent call last):
    File "./x.py", line 9, in <module>
    retcode =
    subprocess.call (args,stdout=ou tput_file.filen o(),stderr=subp rocess.STDOUT)
    File "/sw/lib/python2.5/subprocess.py", line 443, in call
    return Popen(*popenarg s, **kwargs).wait( )
    File "/sw/lib/python2.5/subprocess.py", line 593, in __init__
    errread, errwrite)
    File "/sw/lib/python2.5/subprocess.py", line 1051, in _execute_child
    raise child_exception
    OSError: [Errno 8] Exec format error

    But when I change it to directly call the script that the zsh script
    calls like this:

    args = ('/sw/share/pdb2pqr/pdb2pqr.py','--help')

    everything works:

    localhost~/tmp$ ./x.py
    Running ('/sw/share/pdb2pqr/pdb2pqr.py', '--help')

    This is with 2.5 on OS X 10.4.10. I'm happy to provide whatever
    additional information might be useful.

    Thanks,

    -michael

  • Rob Wolfe

    #2
    Re: Trouble with subprocess.call (...) and zsh script (OSError: [Errno 8] Exec format error)

    Michael George Lerner <mglerner@gmail .comwrites:
    Hi,
    >
    (Python 2.5, OS X 10.4.10)
    I have a program called pdb2pqr on my system. It is installed so that
    "pdb2pqr" is in my path and looks like:
    >
    #\!/bin/zsh -f
    Are you sure that this shebang is correct?

    I've tested that on bash and have similar error:

    # t1.sh

    #\!/bin/sh
    echo "t1"
    >>from subprocess import call
    >>call(['./t1.sh'])
    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    File "/usr/lib/python2.4/subprocess.py", line 413, in call
    return Popen(*args, **kwargs).wait( )
    File "/usr/lib/python2.4/subprocess.py", line 543, in __init__
    errread, errwrite)
    File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child
    raise child_exception
    OSError: [Errno 8] Exec format error

    But running that directly through the shell works:
    >>call(['./t1.sh'], shell=True)
    t1
    0

    However this script works fine also without `shell=True` option:

    # t2.sh

    #!/bin/sh
    echo "t2"
    >>call(['./t2.sh'])
    t2
    0


    HTH,
    Rob

    Comment

    • Michael  George Lerner

      #3
      Re: Trouble with subprocess.call (...) and zsh script (OSError: [Errno 8] Exec format error)

      On Nov 11, 3:25 pm, Rob Wolfe <r...@smsnet.pl wrote:
      Hi Rob,
      Michael GeorgeLerner<mg ler...@gmail.co mwrites:
      >
      Hi,
      >
      (Python 2.5, OS X 10.4.10)
      I have a program called pdb2pqr on my system. It is installed so that
      "pdb2pqr" is in my path and looks like:
      >
      #\!/bin/zsh -f
      >
      Are you sure that this shebang is correct?
      Well, it's correct in the sense that I have faithfully reproduced the
      contents of the file. I didn't write it, though.

      I don't know what the extra backslash is for. I suppose I'll contact
      the authors and find out.

      Any ideas how to make it work with the strange shebang syntax?

      Thanks,

      -michael
      >
      I've tested that on bash and have similar error:
      >
      # t1.sh
      >
      #\!/bin/sh
      echo "t1"
      >
      >from subprocess import call
      >call(['./t1.sh'])
      >
      Traceback (most recent call last):
      File "<stdin>", line 1, in ?
      File "/usr/lib/python2.4/subprocess.py", line 413, in call
      return Popen(*args, **kwargs).wait( )
      File "/usr/lib/python2.4/subprocess.py", line 543, in __init__
      errread, errwrite)
      File "/usr/lib/python2.4/subprocess.py", line 975, in _execute_child
      raise child_exception
      OSError: [Errno 8] Exec format error
      >
      But running that directly through the shell works:
      >
      >call(['./t1.sh'], shell=True)
      >
      t1
      0
      >
      However this script works fine also without `shell=True` option:
      >
      # t2.sh
      >
      #!/bin/sh
      echo "t2"
      >
      >call(['./t2.sh'])
      >
      t2
      0
      >
      HTH,
      Rob

      Comment

      Working...