У меня естьpython хранит заголовки запросов как переменную?
headers = {'content-type': 'application/soap+xml'}
, который работает отлично. Однако я хочу, чтобы это было в состоянии быть указан в качестве аргумента, так в моих аргументах позволяет сказать, что у меня есть
--wsheaders {'content-type':\s'application/soap+xml'}
Это приходит через штраф, как
{'content-type': 'application/soap+xml'}
... Однако, когда я
headers = args.wsheaders
Я получаю массу ошибок. Поэтому очевидно, что заголовки не могут быть строкой. Но должен быть способ сохранить это, где его можно прочитать в переменной? Есть идеи?
EDIT: Я не могу использовать одинарные кавычки вокруг аргумента. Я все еще изучаю это, но кажется, что я не могу использовать одиночные или двойные кавычки вокруг аргумента при передаче аргументов из файла, например, я МОГУ, но он не работает, чтобы группировать символы вместе, вместо этого становится литеральной частью аргумента, который не помогает, поскольку я теряю все до или после пробела. см. вложение для того, как он выглядит в файле.
--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'}
, но тогда потребностей \ S заменить после арг введено, которое я делаю, но тогда переменная - это строка, и я возвращаюсь к исходнику все проблемы.
type=json.loads
не работает в определении аргумента, когда есть \ s, так как это непризнанное JSON. Если бы был способ заменить \ s на argparse, это могло бы сработать, чтобы сделать это сначала ... но я не думаю, что это возможно. С пространства, то с \ сек
Sync03.py: error: argument --wsheaders: invalid loads value: "{'content-type':"
Sync03.py: error: argument --wsheaders: invalid loads value: "{'content-type':\\s'application/soap+xml'}"
EDIT
parser.add_argument('--wsheaders', type=lambda x: json.loads(x.replace('\s', '').replace('\'', '"')))
Этот работал согласно bschlueter комментарий непосредственно ниже.
Вы должны опубликовать, по крайней мере, ошибки, возникающие в вашем коде, если сможете. – bschlueter
'' {'content-type': 'application/soap + xml'} ''не работает, потому что внутренний' '' соответствует предыдущим. Вам нужно будет избежать внутренних, чтобы это было допустимой строкой. '' {\ 'content-type \': \ 'application/soap + xml \'} ''сделает его единственной, допустимой строкой, но это недействительно json, потому что json требует двойных кавычек. '' {"content-type": "application/soap + xml"} ''является допустимым json-представлением одних и тех же данных. – bschlueter
Вы абсолютно можете заменить * \ s * на argparse, просто используйте настраиваемый тип, который исправляет ввод: 'parser.add_argument ('- wsheaders', type = lambda x: json.loads (x.replace ('\ s ',' ') .replace (' \ '', '' '))) '. – bschlueter