如何使用subprocess.call返回的数据而不返回整个输出?

时间:2016-03-11 17:54:14

标签: python subprocess

def is_akamaized(url):
    stripped_http_url = url[8:]
    clean_host = stripped_http_url.rsplit('/')[0]
    nslookup_data = subprocess.call(["nslookup", clean_host], stdout=subprocess.PIPE)
    if nslookup_data.find('akamaiedge'):
        return "\033[1;31mEnvironment is Acamaized {0}  -  {1}\033[1;m"

这个函数只需要一个url并在其上运行nslookup。我想要发生的是我想获取nslookup的输出并通过它解析某些关键字。问题是,使用当前代码,如果我传入一个应该工作的URL(在nslookup中包含单词acamai)

print is_acamaized(url)

它返回0

注意,我添加了stdout = subprocess.PIPE,以便nslookup的整个输出不会返回给终端。

有关如何将nslookup的输出分配给变量的任何建议,以便我可以访问它吗?

1 个答案:

答案 0 :(得分:2)

subprocess.call()返回退出代码,而不是stdout。您可以直接使用Popen课程:

nslookup_data = subprocess.Popen(["nslookup", clean_host], stdout=subprocess.PIPE).communicate()[0]

最后.communicate()[0]很重要。这告诉Popen我们已完成,并返回一个元组:(stdoutstderr)。元组[0]中的第一项是标准输出。

您也可以使用subprocess.check_output()

nslookup_data = subprocess.check_output(["nslookup", clean_host])