我在python中有一个从数据库获取ips的函数,我想迭代它们并调用ping函数但是我得到一个错误"只能连接元组(不是" str")发生错误"在主题领域。当我说print函数show(ipps)被调用时,它只打印数组中的最后一个值
json转储返回
{"ip addresses": [["192.168.0.11"], ["192.168.0.12"], ["192.168.0.13"], ["192.168.0.15"]]}
@ps_gaming.route('/getPSStatusping')
def getPSStatusping():
try:
if session.get('id'):
con = mysql.connect()
cursor = con.cursor()
cursor.callproc('sp_getPSIPSstats')
all_my_ps = cursor.fetchall()
for ipps in all_my_ps:
show(ipps) //error is thrown here
return json.dumps({"ip_addresses":all_my_ps})
else:
return render_template('error.html', error='Unauthorized Access')
except Exception as e:
return render_template('error.html', error=str(e))
finally:
cursor.close()
con.close()
其他功能
def isUp(hostname):
output = subprocess.Popen(["ping.exe", hostname], stdout=subprocess.PIPE).communicate()[0]
print(output)
if ('unreachable' in output):
return '0'
else:
return '1'
def show(hostname1):
value = isUp(hostname1)
if ('1' in value):
print hostname1 + ' Is Active'
else:
print hostname1 + ' Is Unreachable'
任何建议
答案 0 :(得分:1)
在show
内,hostname1
是一个元组。您尝试向其添加字符串,因此您看到的错误。您需要将hostname1
转换为字符串,或从中提取字符串值。我的猜测是,hostname1
元组只包含一个值,因此您可以使用类似print hostname1[0] + ' Is Active'
hostname1
是一个元组,因为cursor.fetchall()
将返回元组(列)的元组(行),并迭代外部元组。在每次迭代中,ipps
本身就是一个元组(尽管可能只有该元组中的一个元素)。尽管每行显然只包含一列,但查询仍然将每一行作为元组返回。将它转换为json时,它表示为嵌套列表。
答案 1 :(得分:0)
在您的show
函数中,尝试将hostname1
转换为字符串,即执行print str(hostname1) + ' is active'
,同样不可用