2011-01-28 8 views
5

Sto usando shlex.split per tokenizzare gli argomenti per una chiamata subprocess.Popen. Tuttavia, quando uno di questi argomenti è un percorso UNC, le cose si fanno peloso:Rendere shlex.split rispetto ai percorsi UNC

import shlex 

raw_args = '-path "\\\\server\\folder\\file.txt" -arg SomeValue' 
args = shlex.split(raw_args) 

print raw_args 
print args 

produce

-path "\\server\folder\file.txt" -arg SomeValue 
['-path', '\\server\\folder\\file.txt', '-arg', 'SomeValue'] 

Come si può vedere, i backslash nella parte anteriore sono smontate. Sto lavorando su questo aggiungendo le seguenti due righe, ma c'è un modo migliore?

if args[0].startswith('\\'): 
    args[0] = '\\' + args[0] 
+0

La tua domanda è incerta. Nell'esempio sopra stai usando stringhe letterali. Puoi farcela usando la tecnica nella risposta di dusan o semplicemente usando valori letterali stringhe grezzi. Tuttavia, hai commentato la mia risposta che le stringhe sono state prese da un file. In questo caso, Python non tenterà nemmeno di toccarli, avranno la stessa quantità di barre. Prova a caricare la stringa da un file e stamparla. O quello, o mi manca qualcosa di ovvio. –

+0

@Alex Buon punto. Ho riprodotto il comportamento che ho visto durante il caricamento della stringa da un file nell'esempio sopra, quindi ho pensato che si sarebbe comportato in modo simile. Verificherò l'aspetto della stringa se caricata dal file. –

risposta

9

Non so se questo ti aiuta:

>>> shlex.split(raw_args, posix=False) 
['-path', '"\\\\server\\folder\\file.txt"', '-arg', 'SomeValue'] 
0

Prova questa:

raw_args = r'-path "\\\\server\\folder\\file.txt" -arg SomeValue' 

Nota r prima che la sola offerta di apertura.

+0

La stringa proviene da un file, quindi sfortunatamente non è un'opzione. –