2011-01-28 191 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'] 

正如你所看到的,在前面的反斜槓被剝離下來。我正在通過添加以下兩行來解決此問題,但有沒有更好的方法?

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

你的問題是不確定的。在上面的示例中,您使用的是字符串文字。你可以通過使用杜尚答案中的技巧或僅僅使用原始字符串文字來應對它們。然而,你評論我的答案,字符串是從文件中提取的。在這種情況下,Python甚至不會嘗試觸摸它們,它們將具有相同數量的斜線。嘗試從文件加載字符串並打印它。要麼,要麼我錯過了一些明顯的東西。 – 2011-01-31 10:22:10

+0

@Alex好點。我重現了上面示例中從文件中加載字符串時看到的行爲,所以我認爲它的行爲類似。我將仔細檢查從文件加載的字符串。 – 2011-01-31 13:55:18

回答

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開單引號之前。