Python, tentando executar um programa do prompt de comando
-
21-09-2019 - |
Pergunta
Estou tentando executar um programa no prompt de comando no Windows. Estou tendo alguns problemas. O código está abaixo:
commandString = "'C:\Program Files\WebShot\webshotcmd.exe' //url '" + columns[3] + "' //out '"+columns[1]+"~"+columns[2]+".jpg'"
os.system(commandString)
time.sleep(10)
Portanto, com as citações únicas, recebo "o nome do arquivo, o nome do diretório ou a sintaxe do rótulo de volume está incorreto". Se eu substituir as citações únicas por ", ele diz algo no efeito de" 'C: Program' não é um executável válido ".
Sei que é um erro de sintaxe, mas não tenho certeza de como consertar isso ....
A coluna [3] contém uma cópia completa de URL colada de um navegador da web (para que deve ser codificado por URL). A coluna [1] conterá apenas números e períodos. A coluna [2] contém algum texto, citações duplas e colonos são substituídos. Mencionando apenas no caso ...
Obrigado!
Solução
Use o subprocesso Módulo para comandos de sistema de chamada. Além disso, tente remover as citações únicas e use cotações duplas.
Outras dicas
- O Windows requer cotações duplas nesta situação e você usou cotações únicas.
- Use o
subprocess
módulo em vez deos.system
, o que é mais robusto e evita ligar diretamente para ligar para o shell, fazendo com que você não precise se preocupar em confundir problemas de fuga. - Não use
+
para montar cordas longas. Use formatação de string (string %s" % (formatting,)
), que é mais legível, eficiente e idiomático. - Nesse caso, não forme uma corda longa como um comando de shell de qualquer maneira, faça uma lista e passe para
subprocess.call
. - O melhor que eu posso dizer que você está escapando da sua barra para a frente, mas não da barra de barriga, o que é para trás. Uma corda literal com
//
tem ambos os cortes na corda que faz. De qualquer forma, em vez de você deve usar oos.path
O módulo que evita qualquer confusão de escapes de análise e geralmente torna os scripts mais portáteis.