Значение переменной Python в кавычках - PullRequest
2 голосов
/ 28 марта 2012

Я редактирую скрипт, который аутентифицируется в openstack keystone для получения токена. API-Call работает, но я хочу использовать переменные вместо прямых значений, чтобы сделать их более читабельными и многократно используемыми. Но проблема в том, что необходимо, чтобы значения были в кавычках ("), и я не могу понять, как это сделать. Я нашел несколько примеров кода [1], [2] для использования переменных в строках в целом, но Мне нужно использовать некоторую escape-последовательность, чтобы поместить значения в кавычки.

На данный момент мое строковое назначение выглядит так:

params = '{"auth":{"passwordCredentials":{"username":"nodermatt", "password":"feelfree"}, "tenantId":"4"}}'

Как видите, значения username, password и tenantID указаны в кавычках, и я хотел бы заменить их переменными:

osuser = "nodermatt"
ospassword = "feelfree"
ostenant = "4"

params = '{"auth":{"passwordCredentials":{"username":osuser, "password":ospassword}, "tenantId":ostenant}}'

Я был бы очень рад, если бы мог решить эту "проблему".

PS: Если я пропустил тему или результат поиска в Google, который соответствует моему вопросу, я был бы очень благодарен за ссылку.

Заранее спасибо! С наилучшими пожеланиями, Nicolas

[1] Подпроцесс в Python Добавление переменных

[2] http://ubuntuforums.org/showthread.php?t=786879

Ответы [ 4 ]

7 голосов
/ 28 марта 2012

Самое простое решение для этого конкретного случая - сначала определить словарь Python, а затем использовать json.dumps() для преобразования его в JSON:

osuser = "nodermatt"
ospassword = "feelfree"
ostenant = "4"

d = {"auth": 
        {"passwordCredentials": {"username": osuser, "password": ospassword},
         "tenantId": ostenant}}
params = json.dumps(d)
2 голосов
/ 28 марта 2012

Вы пытались использовать строку формата?

params = '{"auth":{"passwordCredentials":{"username":%s, "password":%s}, "tenantId":%s}}' % (osuser, ospassword, ostenant)
1 голос
/ 28 марта 2012

Строка формата - это то, что вы ищете, например:

'{"username": "%s", "password":"%s"}' % (osuser, ospassword)

Если у вас есть много переменных для замены, вы можете использовать расширенный Синтаксис:

values = {'osuser': "nodermatt",
    'ospassword': "feelfree",
    'ostenant': 4}
params =  '''{"auth":{"passwordCredentials":{"username":"%(osuser)s",
"password":"%(ospassword)s"}, "tenantId":"%(ostenant)d"}}''' % values

Обратите внимание, что вы можете просто поместить кавычки в строку шаблона там, где вы хотите, чтобы они появлялись. В качестве примера я превратил ostenant в целое число, но вы также можете рассматривать его как строку (как в dict, так и в строке шаблона).

0 голосов
/ 28 марта 2012

Здесь есть библиотека python: https://github.com/openstack/python-keystoneclient

Используется кодировка JSON, как предложил Свен.

Из README:

# use v2.0 auth with http://example.com:5000/v2.0")
>>> from keystoneclient.v2_0 import client
>>> keystone = client.Client(username=USERNAME, password=PASSWORD, tenant_name=TENANT, auth_url=KEYSTONE_URL)
>>> keystone.tenants.list()
>>> tenant = keystone.tenants.create(name="test", descrption="My new tenant!", enabled=True)
>>> tenant.delete()
...