2011-01-28 149 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开单引号之前。