2

我想将一个字符串传递给我的 python 脚本,其中包含转义序列,例如:\x00\t,和空格。
但是,当我将字符串传递为:

some string\x00 more \tstring

python 将我的字符串视为原始字符串,当我从脚本内部打印该字符串时,它会逐字打印字符串,并且不会将其\视为转义序列。
即它完全打印上面的字符串。

更新:(再次)
我正在使用python 2.7.5来重现,创建一个脚本,让我们调用它myscript.py

import sys
print(sys.argv[1])

现在保存它并从 Windows 命令提示符调用它,如下所示:

c:\Python27\python.exe myscript.py "abcd \x00 abcd"

我得到的结果是:

> 'abcd \x00 abcd'

PS 在我的实际脚本中,我使用的是选项解析器,但两者的效果相同。也许我可以为选项解析器设置一个参数来处理转义序列?

4

3 回答 3

7

您收到的字符串sys.argv[1]正是您在命令行中键入的内容。它的反斜杠序列保持不变,不被解释。

要解释它们,请遵循以下答案:基本上使用.decode('string_escape').

于 2013-07-03T02:55:48.323 回答
6

myscript.py 包含:

import sys
print(sys.argv[1].decode('string-escape'))

结果 abcd abcd

于 2013-07-03T03:29:01.940 回答
1

我不知道您可以在不编写自定义解析器的情况下解析整个字符串,但 optparse 支持以不同格式(十六进制、二进制等)发送输入。

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-n", type="int", dest="num")

options, args = parser.parse_args()

print options

那么当你跑步时

C:\Users\John\Desktop\script.py -n 0b10

你得到一个输出

{'num': 2}

我说你必须实现一个自定义解析器才能使这项工作的原因是因为它不是 Python 更改输入,而是它是shell 所做的事情 。Python 可能有一个内置模块来处理这个问题,但我不知道它是否存在。

于 2013-07-03T02:59:39.027 回答