Sonderbares Verhalten von subprocess.call()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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? :)
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.
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Stimmt. Die Bash zeigt nichts an, während z.B. die zsh sich beschwert. Danke für die Aufklärung.
Antworten