Non v'è alcuna funzione spawnl in Python 2.6?
-
21-09-2019 - |
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.
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).