gpt4 book ai didi

python - 如何让我的 Python 脚本使用 bash 工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:01 26 4
gpt4 key购买 nike

我是这个网站的新手,希望这是提出这个问题的正确位置。

我正在尝试使用适用于 Linux 的 python 编写脚本,该脚本:

  1. 创建一个文件file.txt
  2. 'lsof' 命令的输出附加到 file.txt
  3. 读取输出的每一行并将它们附加到一个数组中。
  4. 然后打印每一行。

我这样做基本上只是为了熟悉将 python 用于 bash,我是这个领域的新手,所以任何帮助都会很棒。我不确定从这里去哪里。另外,如果有更好的方法来做到这一点,我愿意接受!

#!/usr/bin/env python
import subprocess

touch = "touch file.txt"
subprocess.call(touch, shell=True)
xfile = "file.txt"

connection_count = "lsof -i tcp | grep ESTABLISHED | wc -l"
count = subprocess.call(connection_count, shell=True)

if count > 0:
connection_lines = "lsof -i tcp | grep ESTABLISHED >> file.txt"

subprocess.call(connection_lines, shell=True)

with open(subprocess.call(xfile, shell=True), "r") as ins:
array = []
for line in ins:
array.append(line)

for i in array:
print i

最佳答案

subprocess.call 返回已启动进程的返回代码(bash 中的 $?)。这几乎肯定不是您想要的——并解释了为什么这条线几乎肯定会失败:

with open(subprocess.call(xfile, shell=True), "r") as ins:

(您无法打开号码)。

您可能希望将 subprocess.Popenstdout=subprocess.PIPE 一起使用。然后你可以从管道中读取输出。例如要计数,您可能需要这样的东西:

connection_count = "lsof -i tcp | grep ESTABLISHED"
proc = subprocess.POPEN(connection_count, shell=True, stdout=subprocess.PIPE)
# line counting moved to python :-)
count = sum(1 for unused_line in proc.stdout)

(你也可以在这里使用Popen.communicate)

请注意,过度使用 shell=True 对我来说总是有点可怕...如 documentation 中所示,将您的管道链接在一起要好得多。 .

关于python - 如何让我的 Python 脚本使用 bash 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732440/

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