2013-01-31 9 views
5

Sto provando a chiamare Vim utilizzando il sottoprocesso e passare un argomento. Per esempio:Come posso dire al sottoprocesso di interrompere l'escape delle mie virgolette?

subprocess.call(['gvim.exe', ''' "+map <F5> :echo 'Hello!'<cr>" ''']) 

Questo comando funziona sulla riga di comando:

> gvim.exe "+map <F5> :echo 'Hello!'<cr>" 

E poi mi ha colpito F5 e mi dice ciao.

La chiamata di sottoprocesso non funziona. Quando guardo il processo in task manager, vedo che la mia stringa è ora:

"\" +map <F5> :echo 'Hello!'<cr>\"" 

Non è quello che mi aspettavo, e non credo che è quello che si aspetta Vim, neanche. It sembra come il sottoprocesso è in qualche modo sfuggito alle mie citazioni, ma non so perché.

C'è un modo per far funzionare tutto come mi aspetto?

risposta

5

Le virgolette non sono necessarie poiché subprocess.call passa gli argomenti direttamente al processo senza utilizzare la shell (a meno che non si imposti shell=True).

Quindi, subprocess.call(['gvim.exe', "+map <F5> :echo 'Hello!'<cr>"]) sarà sufficiente.

+1

Sì, il problema non è l'escaping (che è solo per visualizzare la stringa, dopo tutto), sono le virgolette. – kindall

+0

Huh. Ho pensato * Ho provato anche quel metodo. Non credo! –

Problemi correlati