如何在引号内引用变量

时间:2018-12-04 03:31:15

标签: python database import export

我正在尝试通过XMLRPC调用API,以请求有关产品的信息。

我有一个会话变量,该变量包含我登录后的会话密钥。

我必须将我的调用作为参数传递给另一个调用,至少这是我发现它起作用的唯一方法。

例如:

import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, 'catalog_category.tree')
print (temp)

这很好。

我现在要做什么:

import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, "catalog_product.info(session, 'CM-RC658')")

显然这是不正确的。我的问题是我不确定如何将会话变量传递给catalog_product.info过程,该过程是svc.call方法的字符串参数。

2 个答案:

答案 0 :(得分:2)

只需使用任何字符串解析(例如.format)包装会话变量:

temp = svc.call(session, "catalog_product.info({}, 'CM-RC658')".format(session))

答案 1 :(得分:1)

尝试f弦。

search text
another text

代理对象没有设置的API,但取决于您使用的服务。其中一些将支持自省以告诉您如何使用它们。试试

temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")

查看该API可用方法的列表。

一旦知道了想要的名字,就尝试

print(svc.system.listMethods())

print(svc.system.methodSignature(foo)) 是方法名称(尝试作为字符串)。这应该告诉您该方法的有效参数签名。您也可以尝试。

foo

可能会提供有关该方法如何工作的更多详细信息。这些系统方法名称是标准名称,但并非所有API都具有它们。


如果上述自省方法不起作用,则必须仔细阅读文档和实验。我不知道您的API,但是我可以尝试猜测其他几种可行的形式。试试

print(svc.system.methodHelp(foo))

temp = svc.call(session, "catalog_product.info", session, 'CM-RC658')