如何在不返回整个输出的情况下使用从 subprocess.call 返回的数据?
How to use data returned from subprocess.call without returning the entire output?
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 "3[1;31mEnvironment is Acamaized {0} - {1}3[1;m"
此函数仅接受 url 并在其上运行 nslookup。我想要发生的是我想获取 nslookup 的输出并通过它解析某些关键字。问题是,使用当前代码,如果我传入一个应该工作的 url(在 nslookup 中包含单词 acamai)
print is_acamaized(url)
它returns 0
注意,我添加了 stdout=subprocess.PIPE 这样 nslookup 的整个输出就不会返回到终端。
关于如何将 nslookup 的输出分配给一个变量以便我可以访问它有什么建议吗?
subprocess.call()
returns 退出代码,而不是标准输出。可以直接使用Popen
class:
nslookup_data = subprocess.Popen(["nslookup", clean_host], stdout=subprocess.PIPE).communicate()[0]
最后的.communicate()[0]
很重要。这告诉 Popen
我们完成了,它 returns 一个元组:(stdout
, stderr
)。元组 [0]
中的第一项是标准输出。
您也可以使用 subprocess.check_output()
:
nslookup_data = subprocess.check_output(["nslookup", clean_host])
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 "3[1;31mEnvironment is Acamaized {0} - {1}3[1;m"
此函数仅接受 url 并在其上运行 nslookup。我想要发生的是我想获取 nslookup 的输出并通过它解析某些关键字。问题是,使用当前代码,如果我传入一个应该工作的 url(在 nslookup 中包含单词 acamai)
print is_acamaized(url)
它returns 0
注意,我添加了 stdout=subprocess.PIPE 这样 nslookup 的整个输出就不会返回到终端。
关于如何将 nslookup 的输出分配给一个变量以便我可以访问它有什么建议吗?
subprocess.call()
returns 退出代码,而不是标准输出。可以直接使用Popen
class:
nslookup_data = subprocess.Popen(["nslookup", clean_host], stdout=subprocess.PIPE).communicate()[0]
最后的.communicate()[0]
很重要。这告诉 Popen
我们完成了,它 returns 一个元组:(stdout
, stderr
)。元组 [0]
中的第一项是标准输出。
您也可以使用 subprocess.check_output()
:
nslookup_data = subprocess.check_output(["nslookup", clean_host])