gpt4 book ai didi

python - 值错误: I/O operation on closed file error

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:16 33 4
gpt4 key购买 nike

我需要帮助,我从 2 天前开始尝试解决这个问题,但没有成功,我是 python 新手,请更改代码并解释:

这是通过 scapy 进行 arp 扫描的代码,它从 scapy 扫描中获取结果并将扫描结果( ip 和 macaddress )保存到 linux 机器中的 txt 文件

然后运行一个名为( doublepulsar-detection-script )通过此命令: os.system("python detector_doublepulsar_smb.py --file last.txt")

last.txt = 文件包含scapy扫描结果的

但是扫描完成后我收到此错误:

Traceback (most recent call last): File "test.py", line 116, in lena = int(raw_input("Enter Number : ")) ValueError: I/O operation on closed file

这是完整的代码:

logging.basicConfig(format='%(asctime)s %(levelname)-5s %(message)s',  datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)
logger = logging.getLogger(__name__)


def long2net(arg):
if (arg <= 0 or arg >= 0xFFFFFFFF):
raise ValueError("illegal netmask value", hex(arg))
return 32 - int(round(math.log(0xFFFFFFFF - arg, 2)))


def to_CIDR_notation(bytes_network, bytes_netmask):
network = scapy.utils.ltoa(bytes_network)
netmask = long2net(bytes_netmask)
net = "%s/%s" % (network, netmask)
if netmask < 16:
logger.warn("%s is too big. skipping" % net)
return None

return net


def scan_and_print_neighbors(net, interface, timeout=1):
logger.info("arping %s on %s" % (net, interface))
try:
ans, unans = scapy.layers.l2.arping(net, iface=interface, timeout=timeout, verbose=True)
for s, r in ans.res:
line = r.sprintf("%Ether.src% %ARP.psrc%")
try:
hostname = socket.gethostbyaddr(r.psrc)
line += " " + hostname[0]
except socket.herror:
# failed to resolve
pass
logger.info(line)
except socket.error as e:
if e.errno == errno.EPERM: # Operation not permitted
logger.error("%s. Did you run as root?", e.strerror)
else:
raise

while True:

lena = int(raw_input("Enter Number : "))
print(lena)


if __name__ == "__main__":
import sys
import os
import time


sys.stdout = open('textout.txt', 'w+')

if lena == 1:
for network, netmask, _, interface, address in scapy.config.conf.route.routes:
# skip loopback network and default gw
if network == 0 or interface == 'lo' or address == '127.0.0.1' or address == '0.0.0.0':
continue

if netmask <= 0 or netmask == 0xFFFFFFFF:
continue

net = to_CIDR_notation(network, netmask)
if interface != scapy.config.conf.iface:
# see http://trac.secdev.org/scapy/ticket/537
logger.warn("skipping %s because scapy currently doesn't support arping on non-primary network interfaces", net)

if net:
scan_and_print_neighbors(net, interface)

sys.stdout.close()

os.system("awk 'NR > 2 {print $2}' textout.txt > last.txt")

os.system("python detect_doublepulsar_smb.py --file last.txt")


elif lena == 3 :
print("bye Bye")
break

最佳答案

问题出在您的代码中,它关闭了标准输出文件处理程序,但随后输入尝试向其中写入“Enter Number :”

    if net:
scan_and_print_neighbors(net, interface)

sys.stdout.close() # <<<

要快速修复,请将标准 stdout 保存在不同的变量中,然后在关闭后重定向到该变量。

if __name__ == "__main__":
import sys
import os
import time

saved_stdout = sys.stdout
sys.stdout = open('textout.txt', 'w+')

...

sys.stdout.close()
sys.stdout = saved_stdout

关于python - 值错误: I/O operation on closed file error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673910/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com