Python 如何引用引号内的变量

Python 如何引用引号内的变量,python,database,import,export,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(sessi

我正试图通过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方法的字符串参数。

请尝试f字符串

temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")
代理对象没有设置API,但取决于您使用的服务。其中一些会支持内省来告诉你如何使用它们。试一试

print(svc.system.listMethods())
查看该API可用方法的列表

一旦你知道你想要的人的名字,试试看

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

print(svc.system.methodHelp(foo))
这可能会提供该方法工作原理的更多细节。这些系统方法名称是标准的,但并非所有API都有它们


如果上述内省方法不起作用,您必须仔细阅读文档和实验。我不知道你的API,但我可以试着猜测一些其他可能有效的形式。试一试

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

试试f字串

temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")
代理对象没有设置API,但取决于您使用的服务。其中一些会支持内省来告诉你如何使用它们。试一试

print(svc.system.listMethods())
查看该API可用方法的列表

一旦你知道你想要的人的名字,试试看

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

print(svc.system.methodHelp(foo))
这可能会提供该方法工作原理的更多细节。这些系统方法名称是标准的,但并非所有API都有它们


如果上述内省方法不起作用,您必须仔细阅读文档和实验。我不知道你的API,但我可以试着猜测一些其他可能有效的形式。试一试

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


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

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

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

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


session
是一个字符串吗?@gilch sorry应该说,但是一个类似md5散列的字符串。
session
是一个字符串吗?@gilch sorry应该说,但是一个类似md5散列的字符串。我不知道这是否有效,因为我得到了“无效API路径”作为我尝试执行的响应。“catalog_product.info”只接受会话ID和产品编号作为响应,因此我不确定它失败的原因。@JakeRankin尝试内省系统方法。不熟悉这一点,但会研究它!谢谢。谢谢你扩展你的答案!当我调用listmethods时,我得到“['system.listmethods'、'system.methodHelp'、'system.methodSignature'、'system.multicall'、'HandleHPError'、'startSession'、'endSession'、'login'、'call'、'multicall'、'resources'、'resourceFaults'”globalFaults']”作为回报。MethodHelp只是提供了一个无用的文本描述。我可以通过SOAP和WSDL检索方法列表,但我不确定如何通过XMLRPC使用这些方法。@JakeRankin
methodSignature
应该向您显示名为的方法接受哪些参数。我不知道这是否有效,因为我得到了“无效API路径”作为我尝试执行的操作的响应。“catalog_product.info”只接受会话ID和产品编号作为响应,因此我不确定它失败的原因。@JakeRankin尝试内省系统方法。不熟悉这一点,但会研究它!谢谢。谢谢你扩展你的答案!当我调用listmethods时,我得到“['system.listmethods'、'system.methodHelp'、'system.methodSignature'、'system.multicall'、'HandleHPError'、'startSession'、'endSession'、'login'、'call'、'multicall'、'resources'、'resourceFaults'”globalFaults']”作为回报。MethodHelp只是提供了一个无用的文本描述。我可以通过SOAP和WSDL检索方法列表,但我不确定如何通过XMLRPC使用这些方法。@JakeRankin
methodSignature
应该向您显示名为的方法接受哪些参数。我不知道这是否有效,因为我得到了“无效API路径”作为我尝试执行的操作的响应。“catalog_product.info”只接受会话ID和产品编号作为响应,因此我不确定它失败的原因。如果您想确定,只需打印会话的值并检查信息。但是,正如我看到的,您的问题似乎来自URL路径,通过我的URL路径设置
svc
变量@jakerankin,我可以登录并获取会话ID,当我执行“temp=svc.call(session,'catalog_category.tree')”时,它会返回目录目录树,其中包含大量数据。我只是不知道如何调用除catalog_category.tree以外的方法,这些方法都有参数。唯一能帮助您做到这一点的方法是检查您正在调用的网站的API,以确保您对正确的端点进行了正确的调用,并使用了正确的参数。我不知道这是否有效,因为我得到了“无效的API路径”作为对我所做努力的回应。“catalog_product.info”只接受会话ID和产品编号作为响应,因此我不确定它失败的原因。如果您想确定,只需打印会话的值并检查信息。但是,正如我看到的,您的问题似乎来自URL路径,通过我的URL路径设置
svc
变量@jakerankin,我可以登录并获取会话ID,当我执行“temp=svc.call(session,'catalog_category.tree')”时,它会返回目录目录树,其中包含大量数据。我只是不知道如何调用catalog_category.tree以外的方法,这些方法都有参数