【发布时间】:2016-07-14 00:51:52
【问题描述】:
我有
headers = {'content-type': 'application/soap+xml'}
效果很好。但是我希望能够将其指定为参数,因此在我的参数中可以说我有
--wsheaders {'content-type':\s'application/soap+xml'}
这很好
{'content-type': 'application/soap+xml'}
...但是当我这样做时
headers = args.wsheaders
我有很多错误。所以很明显标题不能是一个字符串。但是必须有一种方法可以将其存储在可以在变量中读回的位置?有什么想法吗?
编辑:我不能在参数周围使用单引号。我仍在学习这一点,但似乎在从文件传递参数时,我不能在参数周围使用单引号或双引号,就像 I CAN 一样,但是将字符组合在一起不起作用,而是变成了文字部分没有帮助的论点,因为我在空格之前或之后丢失了所有内容。请参阅附件以了解文件中的内容。
--wsheaders '{'content-type': 'application/soap+xml'}'
使用单引号或双引号时出错
Sync03.py: error: unrecognized arguments: 'application/soap+xml'}'
Sync03.py: error: unrecognized arguments: 'application/soap+xml'}"
所以我改用
--wsheaders {'content-type':\s'application/soap+xml'}
但是在我输入arg之后需要替换\s,但是变量是一个字符串,我又回到了原来的问题。
type=json.loads
在有 \s 时在参数定义中不起作用,因为它是一个无法识别的 json。如果有办法用 argparse 替换 \s 它可能会首先这样做......但我认为那是不可能的。有一个空格,然后有一个 \s
Sync03.py: error: argument --wsheaders: invalid loads value: "{'content-type':"
Sync03.py: error: argument --wsheaders: invalid loads value: "{'content-type':\\s'application/soap+xml'}"
编辑
parser.add_argument('--wsheaders', type=lambda x: json.loads(x.replace('\s', '').replace('\'', '"')))
根据下面的 bschlueter 评论,这工作。
【问题讨论】:
-
如果可以的话,您应该至少发布代码中的错误。
-
'{'content-type': 'application/soap+xml'}'不起作用,因为内部'与之前的匹配。您需要转义内部字符串才能使其成为有效字符串。'{\'content-type\': \'application/soap+xml\'}'将使其成为单个有效字符串,但它不是有效的 json,因为 json 需要双引号。'{"content-type": "application/soap+xml"}'是相同数据的有效 json 表示形式。 -
您绝对可以将 \s 替换为 argparse,只需使用修复输入的自定义类型:
parser.add_argument('--wsheaders', type=lambda x: json.loads(x.replace('\s', '').replace('\'', '"')))。 -
bschlueter - 最后一种使用替换添加参数的方法有效!谢谢!我不确定到底如何。我知道替换是如何工作的,因为我正在对返回的数据进行 50 次替换,但我以前从未使用过“type=lambda x:”。
标签: python web-services python-requests request-headers