Ecco l'esempio completo:
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]
sua parte dal presupposto che i punti di montaggio non contengono spazi.
Ecco la (soluzione e complicato) più completo che non hard-core numero di colonne:
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]
fonte
2012-08-19 15:11:25
Oltre a os.statvfs Python 3.3 aggiungerà una nuova funzione [shutil.disk_usage] (http://docs.python.org/dev/library/shutil.html#shutil.disk_usage) che restituisce una tupla denominata con gli attributi total, used e free space. – miles82
Preferire il sottoprocesso anziché os.popen, poiché os.popen è deprecato (http://docs.python.org/library/os#os.popen). – GodMan
Grazie a @Gilles. Ho provato la prima opzione e ha funzionato. Ho dovuto fare così per il modulo di sottoprocesso. ** df_output_lines = [s.split() per s in subprocess.Popen (["df", "-Ph"], stdout = subprocess.PIPE) .communicate() [0] .strip(). splitlines()] ** – user1610085