2011-01-28 13 views
5

私はshlex.splitを使用して、subprocess.Popen呼び出しの引数をトークン化しています。これらの引数のいずれかがUNCパスであるときしかし、物事は毛深い取得する:あなたが見ることができるようにshlex.splitにUNCパスを尊重する

import shlex 

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

print raw_args 
print args 

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

を生成し、前のバックスラッシュは、ストリップダウンされています。私は次の2行を追加することでこれを回避していますが、より良い方法がありますか?

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

あなたの質問は不確実です。上記の例では、文字列リテラルを使用しています。あなたは、dusanの答えのテクニックを使うか、生の文字列リテラルを使うだけで対処できます。しかし、あなたは私の答えに文字列がファイルから取られたとコメントしました。この場合、Pythonはそれらに触れることさえしません。同じ量のスラッシュを持ちます。ファイルから文字列を読み込んで印刷してみてください。どちらか、または私は何かが明らかに欠けている。 –

+0

@Alex良い点。上のサンプルのファイルから文字列を読み込むときに見た振る舞いを再現したので、同様に動作すると仮定しました。ファイルからロードされた場合の文字列の表示を再確認します。 –

答えて

9

これがあなたを助けている場合、私は知らない。

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

はこれを試してみてください:

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

注開口部の単一引用符の前R

+0

文字列はファイルから来るので、残念ながらそれはオプションではありません。 –

関連する問題