Seite 1 von 1

Sonderbares Verhalten von subprocess.call()

Verfasst: Dienstag 25. Januar 2011, 19:54
von snafu
Mir ist aufgefallen, dass Python offenbar keine leeren Dateien trotz X-Flag ausführen möchte:

Code: Alles auswählen

urx@murx:~$ touch foo; chmod +x foo
urx@murx:~$ ll foo
-rwxr-xr-x 1 urx urx 0 2011-01-25 19:50 foo*
urx@murx:~$ ./foo
urx@murx:~$ python -c "import subprocess; subprocess.call('./foo')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.6/subprocess.py", line 470, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.6/subprocess.py", line 623, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1141, in _execute_child
    raise child_exception
OSError: [Errno 8] Exec format error
Das ist natürlich eine Sache, auf die ich zufällig gestoßen bin und die nicht wirklich eine praktische Relevanz haben sollte, aber mich würde trotzdem mal interessieren: Bug oder Feature? :)

Re: Sonderbares Verhalten von subprocess.call()

Verfasst: Dienstag 25. Januar 2011, 20:19
von lunar
Weder noch, mit Python an sich hat das schlichtweg nichts zu tun.

Nichts, weder Python noch die Shell, kann leere Dateien ausführen, weil der Kernel selbst damit nichts anfangen kann. Der entsprechende Systemaufruf "execve()" gibt bei leeren Dateien immer ENOEXEC zurück. Daraus wird in Python halt eine entsprechende Ausnahme, während Deine Shell den Fehler offenbar stillschweigend unterdrückt.

Re: Sonderbares Verhalten von subprocess.call()

Verfasst: Mittwoch 26. Januar 2011, 05:24
von snafu
Stimmt. Die Bash zeigt nichts an, während z.B. die zsh sich beschwert. Danke für die Aufklärung.