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!

Foi útil?

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 de os.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 o os.path O módulo que evita qualquer confusão de escapes de análise e geralmente torna os scripts mais portáteis.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top