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!

È stato utile?

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 che os.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 modulo os.path che evita qualsiasi confusione da fughe di parsing e spesso rende gli script più portabile.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top