Domanda

Ho appena notato che i miei vecchi codici scritti in Python 2.5, ora non funziona. Sono in Python 2.6 btw.

>>> os.spawnl(os.P_NOWAIT,"setup.exe")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\python26\lib\os.py", line 612, in spawnl
    return spawnv(mode, file, args)
OSError: [Errno 22] Invalid argument
>>>

Qualsiasi indizio? o hai qualche esempio di lavoro di os.spawn * opzione NOWAIT con.

Aggiornamento:

Anche io metto il percorso completo a os.spawnl (), la sua ancora di errore.

È stato utile?

Soluzione

Thrope ha ragione su subprocess essendo preferita. Ma la roba spawn * è ancora lì in 2.6 . In realtà, si può vedere che nel messaggio di errore. Il tuo primo arg sembra essere valido. Mi piacerebbe verificare il secondo arg, che è il percorso.

Altri suggerimenti

ho ottenuto il lavoro con l'aggiunta di parametri DUMMY infine, un po 'funky se

Questo non funziona

os.spawnl(os.P_NOWAIT,"Setup.exe")

Questo non sta lavorando anche

os.spawnl(os.P_NOWAIT,"Setup.exe","")

Ma questo sta lavorando

os.spawnl(os.P_NOWAIT,"Setup.exe","DUMMY")

Grazie a tutti comunque.

Credo che la sua consiglia di utilizzare la sottoprocesso modulo in questi giorni, piuttosto che il os.spawn* funzioni. (Non riesco a riprodurre il problema, ma non sono su Windows).

Una ricerca su Google porta in primo piano questa pagina circa lo stesso problema accade quando c'è uno spazio nel percorso di installazione di Python. Non riuscivo a riprodurla qui, ma forse è il problema?

In ogni caso, secondo la documentazione MS questo valore di errore (EINVAL) deve essere restituito solo se l'argomento modalità è valido, che non è il caso qui.

os.spawnl() richiede percorso completo al file eseguibile, mentre os.spawnlp() utilizza variabile d'ambiente PATH per trovarlo.

Aggiorna : Inoltre è errore comune da utilizzare backslash escape nel percorso letterale (provare a stampare per vedere se è interpretato a destra).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top