我正在尝试使用以下命令返回的每个IP地址创建一个列表。我不完全确定如何实现这一目标。似乎子进程等于无。
import subprocess
ips = list()
def bash_command(cmd):
subprocess.Popen(['/bin/bash', '-c', cmd])
ips = bash_command("netstat -tuna tcp | grep 9876 | grep -v 0.0.0.0 | awk '{ print $5}' | cut -d':' -f1")
print(ips)
答案 0 :(得分:3)
为了读取输出,您需要将子进程的stdout
定向到管道。之后,您可以使用readlines
函数逐行读取输出(或readline
一次读取一行),或使用read
函数读取整个输出作为单字节数组。
def bash_command(cmd):
sp = subprocess.Popen(['/bin/bash', '-c', cmd], stdout=subprocess.PIPE)
return sp.stdout.readlines()
答案 1 :(得分:0)
由于问题标题很宽泛,因此这里是使用subprocess.run()
的更通用的版本,它需要不同的args返回字符串。我们可以在字符串上调用splitlines()
以返回列表
def subprocess_to_list(cmd: str):
'''
Return the output of a process to a list of strings.
'''
return subprocess.run(cmd,text=True,stdout=subprocess.PIPE).stdout.splitlines()
使用ps
# run command
thelist = subprocess_to_list('ps')
# print the output when it completes
print(*thelist[:5],sep = "\n")
上面的示例输出:
PID TTY TIME CMD
1070 ? 00:00:00 bash
1071 ? 00:00:00 python3
1078 ? 00:00:00 sh
1081 ? 00:00:00 ps