Python, cercando di eseguire un programma dal prompt dei comandi
-
21-09-2019 - |
Domanda
Sto cercando di eseguire un programma dal prompt dei comandi di Windows. Sto avendo alcuni problemi. Il codice è qui sotto:
commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'"
os.system(commandString)
time.sleep(10)
Quindi, con le virgolette singole ottengo "Il nome del file, nome della directory o sintassi dell'etichetta di volume non è corretto." Se sostituisco le virgolette singole con \", poi si dice qualcosa per l'effetto di ' 'C: \ Program'. Non è un eseguibile valido'
Mi rendo conto che è un errore di sintassi, ma non sono del tutto sicuro come risolvere questo problema ....
colonna [3] contiene un URL completo copia incollate da un browser web (quindi dovrebbe essere codificato url). colonna [1] conterrà soltanto numeri e punti. colonna [2] contiene del testo, virgolette doppie e due punti vengono sostituiti. Menzionare solo nel caso in cui ...
Grazie!
Soluzione
Utilizza il sottoprocesso modulo per chiamare i comandi di sistema. Inoltre, provare a rimuovere le virgolette singole e utilizzare le virgolette.
Altri suggerimenti
- Windows richiede le doppie virgolette in questa situazione, e si utilizza virgolette singole.
- Utilizza il modulo
subprocess
piuttosto cheos.system
, che è più robusto ed evita di chiamare il guscio direttamente, rendendo non bisogna preoccuparsi di problemi di fuga confuse. - Non utilizzare
+
di mettere insieme stringhe lunghe. formattazione Usa stringa (string %s" % (formatting,)
), che è più leggibile, efficiente, e idiomatica. - In questo caso, non formano una stringa lunga come comando shell comunque, fare una lista e passarlo al
subprocess.call
. - Come meglio posso dire che si sta fuggire slash, ma non i tuoi backslash, il che è contrario. Una stringa letterale con
//
ha entrambi barre nella stringa fa. In ogni caso, piuttosto che uno si dovrebbe utilizzare il moduloos.path
che evita qualsiasi confusione da fughe di parsing e spesso rende gli script più portabile.