-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 をシュラウドします。少なくとも2回。

Python Lexcial Analysys <= 明らかではないかもしれませんが、考えが変わるでしょう。

于 2012-07-31T13:27:06.090 に答える
1

入力値のフォーマットは本当に悪いです。フォーマットのヘルプを読むことを検討してください。

エラーの原因となる文字列はどれですか? 入力の最初の確認: バックスラッシュ文字は、Python 文字列で特別な意味を持ちます。したがって、パスが次の場合:

s = 'C:\MSDOS'

あなたは書く必要があります:

s = 'C:\\MSDOS'

最初のバックスラッシュは「注意! 次の文字は特別な機能を持つことを意図したものではありません」、2 番目のバックスラッシュは文字そのものです。

http://docs.python.org/release/2.5.2/ref/strings.htmlをご覧ください

于 2012-07-31T13:18:21.100 に答える