如何使用python发布curl命令

问题描述 投票:2回答:3

我需要与此相关的帮助。基本上,我需要使用此命令。这是使用CURL给出的示例。我需要做的只是将其粘贴到cmd中即可完成其工作。

curl \
-H "Content-Type: application/json" -X POST \
-u "{username}":"{password}" \
-d "{\"dialog_node\":\"greeting\",\"conditions\":\"#hello\",\"output\":{\"text\":\"Hi! How can I help you?\"},\"title\":\"greeting\"}" "https://gateway-s.watsonplatform.net/conversation/api/v1/workspaces/bec28d8f-18c1-4e97-8d08-9c842c658b51/dialog_nodes?version=2017-05-26"

URL文档可在此处找到:https://www.ibm.com/watson/developercloud/conversation/api/v1/?curl#create_dialognode

现在的问题是,我想在python脚本中而不是在CMD中运行它。.我已经搜索了google和stackOverflow了几个小时。.但是我似乎找不到正确的答案。。

到目前为止,我已经看到ppl使用1.要求2.urllib3.urllib24.pycurl5.subprocess

我想以正确的方式做。在python脚本中运行上述命令的最佳方法是什么,我该怎么做?

也我正在使用python 3

python-3.x curl cmd ibm-watson watson-assistant
3个回答
3
投票

喜欢Simon O'Doherty说,您可以使用Python SDK来使用对话服务。使用服务或SDK或http requests的确是最佳实践。

“如果某件事值得做,那值得做对,对吧?”。所以呢您问的是“我如何在我的内部运行其他程序程序,只是发出一个很少的Web请求?“

您可以使用cURL命令,可以。但是看起来很难Pythonic。仅需一个小请求,这就是很多工作。 Python的不仅如此。

来自短语here的作者。

但是,您的问题似乎确实要在Python代码中使用cURL命令,因此,这里是一个示例。在这种情况下,您可以使用subprocess

致电Converstation:

import subprocess
subprocess.call(['curl', '-x', 'POST', '-H', '"Accept: application/json"', '-u', '{"userNameFromServiceCredentials:PasswordFromServiceCredentials" }', '"https://gateway-s.watsonplatform.net/conversation/api/v1/workspaces/bec28d8f-18c1-4e97-8d08-9c842c658b51/dialog_nodes?version=2017-05-26"'])

重要:要发送消息并获取输出,您需要使用函数subprocess.check_output();,例如subprocess.check_output();。并向正确的路由器发送消息,您的cURL命令需要类似于example@German Atannasio中的示例。

[注:此答案仅是告诉您遵循哪种更好的方法,如果您真的想@Pridkkett,则遵循一种“石头路径”。

  • 将Watson会话服务与use一起使用的API参考。
  • 请求文档Python

1
投票

如果您使用的是Watson Conversation,则可以只使用Python WDC SDK。

here

对于上面的示例,它是:

https://github.com/watson-developer-cloud/python-sdk

此调用是全有还是全无,因此,如果您有现有节点,它将删除它们。原因是SDK没有对单个节点进行编辑。但这是一种更快的方法,而不是编辑单个节点(如果您有一个以上的节点)。

如果要进行单个调用,则需要使用from watson_developer_cloud import ConversationV1 username = 'USERNAME', password = 'PASSWORD', version = '2017-05-26', workspace_id = 'bec28d8f-18c1-4e97-8d08-9c842c658b51' url = 'https://gateway-s.watsonplatform.net/conversation/api' conversation = ConversationV1( username=username password=password, version=version, url=url } dialog_nodes = [] welcome_node = { 'output': { 'text': { 'values': [ 'Welcome!' ], 'selection_policy': 'sequential' } }, 'parent': None, 'context': None, 'metadata': None, 'next_step': None, 'conditions': 'welcome', 'dialog_node': 'Welcome', 'previous_sibling': None } dialog_nodes.append(welcome_node) # this appends to the previous node above, set by previous_sibling node = { 'dialog_node': 'greeting', 'conditions': '#hello', 'context': None, 'metadata': None, 'next_step': None, 'output':{ 'text': { 'values': [ 'Hi! How can I help you?' ]}, 'selection_policy': 'sequential' } }, 'title': 'greeting ', 'previous_sibling': 'Welcome', 'parent': None } dialog_nodes.append(node) ## Update the workspace. response = conversation.update_workspace( workspace_id=workspace_id, dialog_nodes=dialog_nodes ) print(response) 之类的东西,直到更新SDK。

示例(使用与上面相同的变量:

requests

0
投票

在带有pycurl的python3中,我有些麻烦,以至于我不得不直接发送二进制文件而不是路径。IBM Watson

import requests
from requests.auth import HTTPBasicAuth

endpoint = '{}/v1/workspaces/{}/dialog_nodes?version={}'.format(url,workspace_id,version)

basic_auth = HTTPBasicAuth(username, password)

# Change the condition to always execute. 
node['conditions'] = 'true'

response = requests.post(url=endpoint, auth=basic_auth, json=node)
© www.soinside.com 2019 - 2024. All rights reserved.