Dưới đây là ví dụ hoàn chỉnh:
import subprocess
import re
p = subprocess.Popen("df -h", stdout=subprocess.PIPE, shell=True)
dfdata, _ = p.communicate()
dfdata = dfdata.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]
nó giả định rằng điểm lắp không chứa khoảng trắng.
Đây là (giải pháp và phức tạp) hoàn chỉnh hơn mà không cứng lõi số cột:
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.replace("Mounted on", "Mounted_on")
lines = yield_lines(dfdata)
headers = line_to_list(lines.next())
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]
Nguồn
2012-08-19 15:11:25
Ngoài os.statvfs Python 3.3 sẽ thêm một hàm mới [shutil.disk_usage] (http://docs.python.org/dev/library/shutil.html#shutil.disk_usage) trả về một tuple có tên với tổng số thuộc tính, không gian được sử dụng và không gian trống. – miles82
Ưu tiên quy trình con thay vì os.popen, vì os.popen không được chấp nhận (http://docs.python.org/library/os#os.popen). – GodMan
Cảm ơn @Gilles. Tôi đã thử tùy chọn đầu tiên và nó đã hoạt động. Tôi đã phải làm như thế này cho mô-đun subprocess. ** df_output_lines = [s.split() cho s trong tiến trình con.Popen (["df", "-Ph"], stdout = subprocess.PIPE) .communicate() [0] .strip(). splitlines()] ** – user1610085