2013-01-31 6 views
5

私はサブプロセスを使ってVimを呼び出して、引数に渡そうとしています。たとえば、次のように引用符をエスケープしないようにサブプロセスに指示するにはどうすればよいですか?

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

コマンドラインでこのコマンドの機能:

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

そして私はF5をヒットし、それがハロー私に語りました。

サブプロセスコールが機能しません。

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

すべてではない私が期待したもの、と私はどちらか、それはVimが期待するものだとは思わない:私は、タスクマネージャでプロセスを見てみると、私は私の文字列が今であることを参照してください。それはサブプロセスのようにのように見える私の引用符をエスケープしていますが、私はなぜか分からない。

これは私が期待しているように動作させる方法はありますか?

答えて

5

subprocess.callは、シェルを使用せずに(つまり、shell=Trueを設定しない限り)引数を直接プロセスに渡すので、引用符は必要ありません。

だから、subprocess.call(['gvim.exe', "+map <F5> :echo 'Hello!'<cr>"])で十分です。

+1

はい、問題はエスケープではなく(文字列を表示するためだけです)、引用符です。 – kindall

+0

Huh。私は思った*私もその方法を試みた。私はそうは思わない! –

関連する問題