Ho un programma Python che usa os.system
per eseguire vari comandi. (Non può usare subprocess
perché deve essere retrocompatibile fino a Python 2.0.)Sopprimi "Il programma non può essere avviato perché manca X.dll" popup popup
Su Windows, a volte il comando fa riferimento a DLL in una directory insolita, quindi ottengo il famigerato "Il programma può" t start perché manca X.dll "error popup.
La mia domanda non è su come rendere il comando Trova tutte le DLL. So già come farlo. Quello che voglio sapere è, come faccio a dire a Windows di non mostrare questa finestra di dialogo quando manca una DLL? Invece, il processo figlio dovrebbe stampare il messaggio di errore su stderr (che è stato reindirizzato a un file all'interno dell'invocazione os.system
) e uscire senza successo (causando os.system
di restituire un codice di errore). In questo modo il mio programma potrebbe catturare l'errore e riportarlo a modo suo, piuttosto che restare sospeso finché qualcuno non arriva per fare clic su OK.
MSDN è normalmente mio amico, ma questa volta non ottengo altro che consigli su come far fronte a specifiche DLL mancanti, il che è bello e tutto ma non quello di cui ho bisogno questa volta.
Per ribadire, questa è una situazione di estrema compatibilità con le versioni precedenti: ho bisogno di una soluzione che funzioni con Python 2.7 o qualsiasi versione precedente fino alla 2.0. Ha anche bisogno di lavorare su tutte le versioni ancora popolari di Windows (XP, Vista, 7, 8). Lavorare con ancora più vecchio Windows è altamente desiderabile ma non richiesto al 100%. Inoltre, i moduli di terze parti e i programmi di supporto scritti in qualsiasi altra lingua non sono un'opzione. (Suppongo che un file .BAT
vada bene, se questo è l'unico modo per farlo.)
Potete chiarire un po '? Se dovessi eseguire cl.exe su questa macchina senza Python coinvolto, si aprirà lo stesso errore? – Krets
Potrebbe o meno, a seconda di quale delle varie impostazioni di 'PATH' che ho scelto. * Ma non è questo il punto della domanda. * So già come aggiustare il 'PATH'. La domanda riguarda come ottenere l'* errore * da riferire al mio programma invece che tramite questa finestra di dialogo fuori banda. – zwol