【发布时间】:2016-03-12 03:02:48
【问题描述】:
我有一个 bash 脚本,它执行一些 DNS 查询并返回一个 IP 地址值,我将其分配为变量 $external
我想从 bash 脚本中获取这个变量并将其输入 python 并执行一些子网智能,但我不确定如何处理之后的数据并将其传递回 bash。
我可以看到 $external 变量正在从 bash 传递到 python ok,但这是我不确定下一步该做什么的地方。 (感谢 Farhan.K 帮助我完成已有的工作)
python3 <<END
import ipaddress
ipsub = {"10.10.10.0/24": "Firewall-Denver", "10.10.20.0/25": "FirewallNewYork"}
iplist = [$external]
ipfirewall = []
for i in ipsub:
for j in iplist:
if ipaddress.ip_address(j) in ipaddress.ip_network(i):
ipfirewall.append([j,ipsub[i]])
END
以下内容会将其写入文件:
with open('output.txt', 'w') as file:
file.writelines('\t'.join(i) + '\n' for i in ipfirewall)
但是如何以相同的格式将其传回 bash?
提前感谢您的建议和帮助。
【问题讨论】:
-
您可以简单地写入标准输出并将其捕获到 shell 变量中或在管道中对其进行操作。是这个问题吗?此外,最好让你的 python 脚本接受命令行参数,而不是直接将变量扩展到脚本中(这种方式更安全、更干净)。
-
这很令人困惑。为什么需要在 bash 和 python 之间来回传递值?为什么不尝试一个“纯”python 程序,如果有一些 bash 功能,从那里调用它并传递值 ofer stdout?
-
您是否尝试过
sys.stdout.writelines()并在 bash 脚本中接受来自标准输入的输入? -
Rafael T - 不幸的是,已经在 bash 中完成了大量的开发工作,我想在 python 中使用 ipaddress 函数。
-
将值作为
sys.argv[1]传递会比将文本插入到此处的文档中要健壮得多。