我是这个网站的新手,所以希望这是提出这个问题的正确位置。
我正在尝试使用python for Linux编写脚本:
file.txt
'lsof'
命令的输出附加到file.txt
我基本上只是为了熟悉使用python for 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
答案 0 :(得分:2)
subprocess.call
返回已启动进程的返回码(bash中为$?
)。这几乎肯定不是你想要的 - 并解释了为什么这条线几乎肯定会失败:
with open(subprocess.call(xfile, shell=True), "r") as ins:
(你不能打开一个号码)。
可能您希望将subprocess.Popen
与stdout=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所示,将管道链接起来要好得多。