完全な例を次に示します。
import subprocess
import re
p = subprocess.Popen("df -h", stdout=subprocess.PIPE, shell=True)
dfdata, _ = p.communicate()
dfdata = dfdata.decode().replace("Mounted on", "Mounted_on")
columns = [list() for i in range(10)]
for line in dfdata.split("\n"):
line = re.sub(" +", " ", line)
for i,l in enumerate(line.split(" ")):
columns[i].append(l)
print(columns[0])
マウントポイントにスペースが含まれていないことを前提としています。
これは、列の数をハードコアしない、より完全な (そして複雑な解決策) です。
import subprocess
import re
def yield_lines(data):
for line in data.split("\n"):
yield line
def line_to_list(line):
return re.sub(" +", " ", line).split()
p = subprocess.Popen("df -h", stdout=subprocess.PIPE, shell=True)
dfdata, _ = p.communicate()
dfdata = dfdata.decode().replace("Mounted on", "Mounted_on")
lines = yield_lines(dfdata)
headers = next(lines, line_to_list)
columns = [list() for i in range(len(headers))]
for i,h in enumerate(headers):
columns[i].append(h)
for line in lines:
for i,l in enumerate(line_to_list(line)):
columns[i].append(l)
print(columns[0])