python - Python、Django 和标准输出的奇怪问题

标签 python mysql django linux unix

我想知道是否可以通过我在下面粘贴的代码获得一些帮助。现在它运行并完成了 ping 任务,但是它遇到了以下错误。任何帮助都会很棒,因为我已经为此工作了一段时间。

错误:

    Server.objects.filter(pk=id[0]).update(online=1)
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'

代码:

import subprocess
from django.db import models
from networkstats.models import Server

query = Server.objects.values_list('id', 'ip_address')
for ip_address in query:
    print 'Server ID: ' + str(ip_address[0])
    print 'Server IP: ' + str(ip_address[1])
    command = ['ping -t 200 -c 1 ' + ip_address[1]]
    ping = subprocess.Popen(command, stdout=subprocess.PIPE, shell = True)
    if "100% pocket loss" in ping.stdout.read():
        Server.objects.filter(pk=id[0]).update(online=0)
    else:
        Server.objects.filter(pk=id[0]).update(online=1)

最佳答案

看起来像是打字错误。你想写 ip_address[0] 而不是 id[0] 吗?

idbuilt-in function ,因此您会收到此错误。

另请查看您的代码片段的可能更好的实现:

for server in Server.objects.only('ip_address', 'id').all():
    print 'Server ID: ' + str(server.id)
    print 'Server IP: ' + str(server.ip_address)

    command = ['ping -t 200 -c 1 ' + server.ip_address]
    ping = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)

    online = 1
    if "100% pocket loss" in ping.stdout.read():
        online = 0

    server.update(online=online)

这将只获取需要的行(如果还有其他行)并减少数据库的流量。

关于python - Python、Django 和标准输出的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12795987/

相关文章:

python - 如何为基于 Django MPTT 的分类应用程序添加尾部斜杠?

python - 如何通过 Conda 安装 Python OpenCV?

MYSQL修改表current_time默认错误

javascript - Django - 手动表单字段渲染添加类

php - 如何对波兰语字符进行编码

mysql - 如何计算MySQL中的总数百分比

javascript - 解析 Django 中 querydict 字典中的整个列表

python - 比较两个数据帧,一个有时间范围,另一个有特定时间

python - 使用 python 透视 CSV 字符串,而不使用 pandas 或任何类似的库

python - 检查IP地址版本的最快方法