在Python中进行终端调用的方法,捕获返回的内容?

时间:2017-04-08 02:47:28

标签: python

我正在研究一个项目,我正在将字符串传递给此NLP API,该API返回字符串情感分析的JSON对象。我承认我是一个Python新手:

http://text-processing.com/docs/sentiment.html

通过命令行调用API的文档很简单。当我打开终端并运行命令时,它工作正常。

curl -d "text=great" http://text-processing.com/api/sentiment/

在终端上运行该命令会产生:

{"probability": {"neg": 0.59309571705919506, "neutral": 0.5403849950008478, "pos": 0.40690428294080488}, "label": "neutral"}

我试图在Python中找到一种方法,使用相同的命令进行终端调用,捕获JSON对象,解码并在我的代码中使用它。

到目前为止,我发现使用以下代码可以在Python中使用:

import os
os.system('curl -d "text=great" http://text-processing.com/api/sentiment/')

但是,当我在Python文件中运行此行时,它会打印出JSON对象。如何将输出保存到变量,然后转储字符串并在我的代码中使用JSON结果?

当我尝试:

import os
sentiment = os.system('curl -d "text=great" http://text-processing.com/api/sentiment/')

它忽略了我的变量赋值,并继续打印出JSON对象。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。与您的代码最相似的方法是使用subprocess包来调用操作系统。

import subprocess
process = subprocess.Popen(['curl', '-d', '"text=great"',
                            'http://text-processing.com/api/sentiment/'],
                             stdout=subprocess.PIPE)
stuff, err = process.communicate()

另一种方法是使用python包来发布帖子请求。

import requests
response = requests.post(url='http://text-processing.com/api/sentiment/',
                         data="text=great").content
stuff = response.content