【问题标题】:Handling python output data in a bash script在 bash 脚本中处理 python 输出数据
【发布时间】: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] 传递会比将文本插入到此处的文档中要健壮得多。

标签: python bash


【解决方案1】:

您可以通过将预期结果写入 Python 的标准输出,并将结果捕获到变量中来做到这一点。

#!/bin/bash

external="'10.10.10.1','10.10.20.1'"

result="$(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]])
print(ipfirewall)
END
)"

echo "$result"

在上面的脚本中,我将$external 传递到 Python heredoc,运行您的进程,并在 Python 中打印结果。 $() 构造将 Python 脚本的标准输出捕获到 Bash 变量中。

有关此问题的更通用版本,请参阅How to assign a heredoc value to a variable in Bash?

【讨论】:

  • 虽然你应该在echo "$result"中使用双引号
  • 我似乎无法返回从 for 循环返回的内容
  • 我已经修改了脚本以更贴近您的原始代码,这应该会有所帮助。
  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
  • 2018-06-05
  • 2013-04-20
  • 2019-01-09
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多