ValueError:python shlex.split没有转义字符

时间:2012-07-31 13:12:00

标签: python

我有一个字符串如下

mystring1=xcopy /Q /Y d:\\Program Files\\TestData\\*.* c:\\Program Files\\TestData\\Company name\\
mystring2=xcopy '/Q' '/Y' 'd:\tj\tjData\\' "c:\Program Files\TestData\\Company name\\"

我使用shlex模块如下

mylist1=shlex.split(mystring1) 
mylist2=shlex.split(mystring2) 

但是我收到了一个错误:

ValueError: No escaped character

mylist1值应为 [xcopy,/ Q,/ Y,d:\ Program Files \ TestData \,c:\ Program Files \ TestData \ Company name \]

mylist2值应为 [xcopy,/ Q,/ Y,d:\ tj \ tjData \,c:\ Program Files \ TestData \ Company name \]

2 个答案:

答案 0 :(得分:3)

嗯,我不确定你想要做什么,但是,第一方面,我看到一个Windows用户,另一方面,我在手册中播种Posix选项。 / p>

所以我想:“posix = False”适合他。

以下是它给出的内容:

>>> mystring1
'xcopy /Q /Y d:\\Program Files\\TestData\\*.* c:\\Program Files\\TestData\\Company name\\'
>>> split(mystring1, posix=False)
['xcopy', '/Q', '/Y', 'd:\\Program', 'Files\\TestData\\*.*', 'c:\\Program', 'Files\\TestData\\Company', 'name\\']
>>> mystring2
'xcopy \'/Q\' \'/Y\' \'d:\tj\tjData\\\' "c:\\Program Files\\TestData\\Company name"'
>>> split(mystring2, posix=False)
['xcopy', "'/Q'", "'/Y'", "'d:\tj\tjData\\'", '"c:\\Program Files\\TestData\\Company name"']

字符转义可能并不完全符合您的需求,但由于我不经常使用Windows,因此我不会再冒险了。

编辑:据我所知,当您开始讨论主题时,在文档中导航并不总是很容易,这里有一些链接:

shlex< =你总是RTFM。至少两次。

Python Lexcial Analysys< =可能不明显,但会改变主意。

答案 1 :(得分:0)

输入值的格式非常糟糕。 考虑阅读格式化帮助。

哪个字符串会导致错误? 首先看一下你的输入:反斜杠字符在Python字符串中有特殊含义。 所以当路径是:

s = 'C:\MSDOS'

你必须写:

s = 'C:\\MSDOS'

第一个反斜杠说:“注意!下一个字符并不意味着具有特殊功能”,第二个反斜杠就是字符本身。

查看http://docs.python.org/release/2.5.2/ref/strings.html