2015-01-26 12 views
5

Conosco il backslash di escape nella programmazione. Comunque sto passando un argomento da riga di comando in un programma Python per analizzare. Lo spazio bianco è irrilevante, tuttavia tramite la riga di comando, gli spazi bianchi contano. Quindi sto cercando di concatenare tutti gli argomenti argv [] tranne il primo elemento in una stringa per poi analizzare. Tuttavia un token di un singolo "\" non viene mai incontrato nel ciclo for.Gestione del backslash come argomento della riga di comando in Python

L'argomento della riga di comando (notare gli spazi bianchi intorno '\'):

((1 * 2) + (3 - (4 \ 5))) 

Programma:

import sys 
string = "" 
for token in sys.argv[1:len(sys.argv)]: 
    print(token) 
    if "\\" in r"%r" % token: 
     print("Token with \\ found") 
    string += token 
print(string) 
print("done") 
+3

Perché non si passa l'intera espressione come un singolo argomento? 'python myscript.py '((1 * 2) + (3 - (4 \ 5)))''. Inoltre, bash considera \ come un inizio di una sequenza di escape e non lo invia come argomento, ma cmd non lo invia e lo invia normalmente, che fornisce un comportamento diverso su un SO differente. – Kolmar

+0

Sono d'accordo con @Kolmar, renderebbe le cose molto più semplici in python e non ti devi preoccupare di ciò che la shell fa ai tuoi argomenti – Paco

+0

Che ha funzionato perfettamente. Ringrazia tutti! – tfbbt8

risposta

3

Questo non è un problema di Python. La shell interpreterà il testo che scrivi nella riga di comando e (per le tipiche shell Unix) eseguirà la sostituzione del backslash. Quindi, quando Python esamina la riga di comando, il backslash sarà già stato sostituito.

La soluzione è raddoppiare la barra rovesciata o inserirla tra virgolette singole, se la shell è Bash o qualche altra shell Unix compatibile con Bourne. Windows CMD è diverso e sconcertante a sé stante; Csh doppiamente così.

+0

Grazie amico. È per un incarico e stavo andando dal pdf che mostrava che veniva passato senza virgolette. L'utilizzo di virgolette singole ha risolto completamente il problema. Grazie ancora! – tfbbt8

Problemi correlati