python - 将带有键的字典传递给函数
问题描述
我是Python世界的新手,所以我不知道我是否会以适当的方式解释它。
我有一个多线程脚本,其中线程函数有几个变量,2 个强制和*args
. 在*args
我想将调用传递给字典键,但将其作为变量传递。让我向您展示代码,以便您更好地理解:
编辑:正确的代码示例
import threading
routers = []
def list_file(file, separator=None):
if separator:
return [line.strip().split(separator) for line in open(str(file), "r").readlines()]
else:
return [line.strip() for line in open(str(file), "r").readlines()]
def do_something(target, command, *args):
if command == "one":
print(target, "option one", args)
if command == "two":
print(target, "option two", args)
else:
print("No valid command")
def thread(targets, cmd, *args):
try:
threads = list()
for x in targets:
th = threading.Thread(target = cmd, args = (x["hostname"],) + args)
threads.append(th)
th.start()
except KeyboardInterrupt:
print("\n\n* Program aborted by user. Exiting...\n")
raise
for x in list_file("./hosts.txt", ","):
routers += [{"hostname": x[0], "dmvpn_ip": x[1]}]
thread(routers,do_something, 'one', 'hello' + x["dmvpn_ip"])
基本上,如果您看到“thread(routers,do_something, 'one', 'hello' + x["dmvpn_ip"] )" 我想通过x["dmvpn_ip"]在第 th 变量中的 thread() 中完成"th = threading.Thread(target = cmd, args = (x["hostname"],) + args )"。
但它会引发以下错误,如果我将它作为字符串发送,它不会做我想要的:
Traceback (most recent call last):
File "/test.py", line 38, in <module>
thread(routers,do_something, 'one', 'hello' + x["dmvpn_ip"])
TypeError: list indices must be integers or slices, not str
亲切的问候
解决方案
好的,所以我以另一种方式完成了它并工作了:我从线程函数中取出 for 循环并在外面执行,这样我就可以直接传递键的值。现在它看起来像这样:
import files
routers = []
threads = list()
for x in files.list_file("./hosts.txt", ","):
routers += [{"hostname": x[0], "dmvpn_ip": x[1]}]
for y in routers:
thread(threads,y['hostname'],router_cmd, 'normal', 'sh dmvpn interface ' + y['dmvpn_ip'])
和线程代码:
def thread(threads, target, cmd, *args):
try:
th = threading.Thread(target = cmd, args = (target,) + args)
threads.append(th)
th.start()
except KeyboardInterrupt:
print("\n\n* Program aborted by user. Exiting...\n")
raise
推荐阅读
- javascript - 如何将可折叠表单添加到 PHP 代码中的编辑按钮?我尝试了一些东西,但没有用
- python-3.x - 从从发布请求收到的 iframe 响应中解析 src 链接
- c++ - 打印数组中非连续元素的最大和的解
- r - 定义具有常数数值的矩阵
- python - 绘制两个系列数据
- python - 了解返回语句中的打印
- reactjs - 输入'{匹配:任何;}' 不可分配给类型 '(props: RouteComponentProps
) => 反应节点 - python - 从函数返回多条数据的问题
- javascript - 为什么无限递归异步函数不会导致堆栈溢出?
- c - 如何分割图像并将其保存在一维数组中