在 "logger" 消息中添加 "for" 循环结果
Adding "for" loop results inside a "logger" message
我有以下功能逻辑。
def funct(arg):
...
return result_list
param_list = ['param1','param2']
for my_arg in param_list
my_results = funct(my_arg)
如何获取 运行 两个参数的函数的完整结果列表?有更好的组织方式吗?
按照我尝试应用该逻辑购买的答案之一,我没有得到想要的结果:
from pythonping import ping
from log_class import NetddLog
def ip_probe(ip, ip_probe_logger, ipsl):
def ping_ip():
try:
ip_probe_logger.info(f"Pinging {ip} started")
result = ping(ip, count=5, df=True, payload='64')
ip_probe_logger.info(f"Pinging {ip} succeded")
except Exception as err:
ip_probe_logger.error(f"Pinging {ip} failed {err}")
def trace_ip():
#function for traceroute
pass
ping_ip()
#trace_ip()
log_contents = ip_probe_logger.log_capture_string.getvalue()
ipsl.append(log_contents)
return ipsl
if __name__ == "__main__":
ipsl = ['Start']
ip_probe_logger = NetddLog("IP_PROBE", level="INFO")
ip_list = ["192.168.255.68", "192.168.254.108"]
for ip in ip_list:
ipsl.extend(ip_probe(ip, ip_probe_logger, ipsl))
print('')
for log_item in ipsl:
print(log_item.rstrip())
我得到的结果有很多重复,但我想要实现的是在第一个 'Start' 项之后将每个单独的 ping 结果添加到 IPSL 列表。
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,772|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:12:49,078|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,772|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:12:49,078|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
通过将 for 循环的主体更改为:ip_probe(ip, ip_probe_logger, ipsl)
我仍然重复可能是因为第二个函数 return.
Start
2022-03-24 01:22:32,829|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:22:33,235|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:22:32,829|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:22:33,235|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:22:33,236|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:22:33,504|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
如果您只需要一条消息,请创建一个将输入映射到输出的字典,然后一次性将其全部打包
当心非常大的字典可能会很麻烦,您可能想要截断它、对其进行 base64 编码或做其他工作来减小结果大小
results = {}
for my_arg in param_list
results[my_arg] = funct(my_arg)
logger.info(f"results mapping: {results}")
制作 my_results
列表,并在每次调用时扩展它。
my_results = []
for my_arg in param_list
my_results.extend(funct(my_arg))
这种情况很少见,您可能确实需要 ,这可以使您的函数更加高效(因为它们可以避免创建只会被丢弃的中间列表)
def funct(input_value):
for result in some_source(input_value):
yield result
def funct_wrapper(input_values):
for input_value in input_values:
yield from funct(input_value)
收集并使用结果,将它们添加到某个集合中以供稍后显示
将 my_results 设为列表,并在每次迭代时追加或扩展它。这是一个例子:
def funct(arg):
....
return result_list
my_results=[]
param_list = ['param1','param2']
for my_arg in param_list:
my_results.append(funct(my_arg))
# print(my_results)
我有以下功能逻辑。
def funct(arg):
...
return result_list
param_list = ['param1','param2']
for my_arg in param_list
my_results = funct(my_arg)
如何获取 运行 两个参数的函数的完整结果列表?有更好的组织方式吗?
按照我尝试应用该逻辑购买的答案之一,我没有得到想要的结果:
from pythonping import ping
from log_class import NetddLog
def ip_probe(ip, ip_probe_logger, ipsl):
def ping_ip():
try:
ip_probe_logger.info(f"Pinging {ip} started")
result = ping(ip, count=5, df=True, payload='64')
ip_probe_logger.info(f"Pinging {ip} succeded")
except Exception as err:
ip_probe_logger.error(f"Pinging {ip} failed {err}")
def trace_ip():
#function for traceroute
pass
ping_ip()
#trace_ip()
log_contents = ip_probe_logger.log_capture_string.getvalue()
ipsl.append(log_contents)
return ipsl
if __name__ == "__main__":
ipsl = ['Start']
ip_probe_logger = NetddLog("IP_PROBE", level="INFO")
ip_list = ["192.168.255.68", "192.168.254.108"]
for ip in ip_list:
ipsl.extend(ip_probe(ip, ip_probe_logger, ipsl))
print('')
for log_item in ipsl:
print(log_item.rstrip())
我得到的结果有很多重复,但我想要实现的是在第一个 'Start' 项之后将每个单独的 ping 结果添加到 IPSL 列表。
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,772|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:12:49,078|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
Start
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,444|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:12:48,770|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:12:48,772|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:12:49,078|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
通过将 for 循环的主体更改为:ip_probe(ip, ip_probe_logger, ipsl)
我仍然重复可能是因为第二个函数 return.
Start
2022-03-24 01:22:32,829|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:22:33,235|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:22:32,829|IP_PROBE|INFO: Pinging 192.168.255.68 started
2022-03-24 01:22:33,235|IP_PROBE|INFO: Pinging 192.168.255.68 succeded
2022-03-24 01:22:33,236|IP_PROBE|INFO: Pinging 192.168.254.108 started
2022-03-24 01:22:33,504|IP_PROBE|INFO: Pinging 192.168.254.108 succeded
如果您只需要一条消息,请创建一个将输入映射到输出的字典,然后一次性将其全部打包
当心非常大的字典可能会很麻烦,您可能想要截断它、对其进行 base64 编码或做其他工作来减小结果大小
results = {}
for my_arg in param_list
results[my_arg] = funct(my_arg)
logger.info(f"results mapping: {results}")
制作 my_results
列表,并在每次调用时扩展它。
my_results = []
for my_arg in param_list
my_results.extend(funct(my_arg))
这种情况很少见,您可能确实需要
def funct(input_value):
for result in some_source(input_value):
yield result
def funct_wrapper(input_values):
for input_value in input_values:
yield from funct(input_value)
收集并使用结果,将它们添加到某个集合中以供稍后显示
将 my_results 设为列表,并在每次迭代时追加或扩展它。这是一个例子:
def funct(arg):
....
return result_list
my_results=[]
param_list = ['param1','param2']
for my_arg in param_list:
my_results.append(funct(my_arg))
# print(my_results)