如何使用 bash 让我的 Python 脚本工作?
How can I get my Python script to work using bash?
我是这个网站的新手,希望这是提出这个问题的正确位置。
我正在尝试使用 python 为 Linux 编写脚本,即:
- 创建一个文件
file.txt
- 将
'lsof'
命令的输出附加到 file.txt
- 读取输出的每一行并将它们追加到一个数组中。
- 然后打印每一行。
我这样做基本上只是为了让自己熟悉使用 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
returns 已启动进程的 return 代码(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.
中所示,将管道链接在一起会好得多
我是这个网站的新手,希望这是提出这个问题的正确位置。
我正在尝试使用 python 为 Linux 编写脚本,即:
- 创建一个文件
file.txt
- 将
'lsof'
命令的输出附加到file.txt
- 读取输出的每一行并将它们追加到一个数组中。
- 然后打印每一行。
我这样做基本上只是为了让自己熟悉使用 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
returns 已启动进程的 return 代码(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.