-3

我有一个字符串如下

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\]

4

2 回答 2

3

好吧,我不确定你想做什么,但是,一方面,我看到了一个 Windows 用户,另一方面,我在手册中植入了一个Posix选项。

所以我想:“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 <= 可能并不明显,但会改变你的想法。

于 2012-07-31T13:27:06.090 回答
1

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

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

s = 'C:\MSDOS'

你必须写:

s = 'C:\\MSDOS'

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

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

于 2012-07-31T13:18:21.100 回答