OSError: [Errno 8] Exec format error
può accadere se non c'è una linea shebang nella parte superiore dello script di shell e si sta tentando di eseguire direttamente lo script. Ecco un esempio che riproduce il problema:
>>> with open('a','w') as f: f.write('exit 0') # create the script
...
>>> import os
>>> os.chmod('a', 0b111101101) # rwxr-xr-x make it executable
>>> os.execl('./a', './a') # execute it
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/os.py", line 312, in execl
execv(file, args)
OSError: [Errno 8] Exec format error
per risolvere il problema, è sufficiente aggiungere la baracca per esempio, se si tratta di uno script di shell; anteporre #!/bin/sh
nella parte superiore dello script:
>>> with open('a','w') as f: f.write('#!/bin/sh\nexit 0')
...
>>> os.execl('./a', './a')
esegue exit 0
senza errori.
Sui sistemi POSIX, shell analizza l'esempio da riga di comando, lo script non vedrà spazi intorno =
ad esempio, se è script
:
#!/usr/bin/env python
import sys
print(sys.argv)
poi eseguirlo nella shell:
$ /usr/local/bin/script hostname = '<hostname>' -p LONGLIST
produce:
['/usr/local/bin/script', 'hostname', '=', '<hostname>', '-p', 'LONGLIST']
Nota: senza spazi intorno a '='
. Ho aggiunto le citazioni attorno allo <hostname>
per evitare i metacaratteri di reindirizzamento <>
.
per emulare il comando di shell in Python, eseguire:
from subprocess import check_call
cmd = ['/usr/local/bin/script', 'hostname', '=', '<hostname>', '-p', 'LONGLIST']
check_call(cmd)
Note: no shell=True
. E non è necessario sfuggire a <>
perché non viene eseguita alcuna shell.
"Exec format error"
potrebbe indicare che il script
ha formato non valido, eseguire:
$ file /usr/local/bin/script
per scoprire di cosa si tratta.Confrontare l'architettura con l'uscita di:
$ uname -m
Wild guess: prova ''nomehost = nome server effettivo'' anziché' 'nomehost =', 'nome server effettivo'' – Kevin
In base a come dici di eseguirlo al prompt, sembra che' hostname' sia un argomento e '=' è un argomento separato, che è piuttosto strano. Sei sicuro che ci siano degli spazi attorno a '='? –
ciao Bryan, sì, ci deve essere spazio. Lo script accetta l'argomento del tipo chiave = valore. – user3477108