将字符串作为参数传递,而不将其视为原始字符串

时间:2013-07-03 02:43:30

标签: python python-2.7

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

some string\x00 more \tstring

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

更新:(AGAIN)
我正在使用 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'

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

3 个答案:

答案 0 :(得分:6)

myscript.py包含:

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

结果     abcd abcd

答案 1 :(得分:5)

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

要解释它们,请关注this answer:基本上使用.decode('string_escape')

答案 2 :(得分:1)

我不知道你可以在不编写自定义解析器的情况下解析整个字符串,但optparse支持sending inputs in different formats(十六进制,二进制等)。

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改变输入而是something the shell does。 Python可能有一个内置的模块来处理这个问题但我不知道它是否存在。