[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

linux disc space

DataSmash

2/15/2008 5:10:00 PM

I simply want to capture the free disc space in a variable so that I
can compare changes. I'm aware of a few commands like "df -h" or "du -
k", but I can't figure out how to capture those values as a variable.
I also looked at os.statvfs(), but that output doesn't seem to make
any sense at all to me, knowing the size of the disc.
Thanks for your help!
R.D.
10 Answers

Tobiah

2/15/2008 7:01:00 PM

0

DataSmash wrote:
> I simply want to capture the free disc space in a variable so that I
> can compare changes. I'm aware of a few commands like "df -h" or "du -
> k", but I can't figure out how to capture those values as a variable.
> I also looked at os.statvfs(), but that output doesn't seem to make
> any sense at all to me, knowing the size of the disc.
> Thanks for your help!
> R.D.

You could use the subprocess module to capture the output
of your disk usage commands.

--
Posted via a free Usenet account from http://www.te...

Chris

2/15/2008 7:19:00 PM

0

On Feb 15, 7:10 pm, DataSmash <r...@new.rr.com> wrote:
> I simply want to capture the free disc space in a variable so that I
> can compare changes. I'm aware of a few commands like "df -h" or "du -
> k", but I can't figure out how to capture those values as a variable.
> I also looked at os.statvfs(), but that output doesn't seem to make
> any sense at all to me, knowing the size of the disc.
> Thanks for your help!
> R.D.

import os, statvfs
s = os.statvfs(".")
freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]

HTH,
Chris

Jeff Schwab

2/15/2008 7:32:00 PM

0

Chris wrote:
> On Feb 15, 7:10 pm, DataSmash <r...@new.rr.com> wrote:
>> I simply want to capture the free disc space in a variable so that I
>> can compare changes. I'm aware of a few commands like "df -h" or "du -
>> k", but I can't figure out how to capture those values as a variable.
>> I also looked at os.statvfs(), but that output doesn't seem to make
>> any sense at all to me, knowing the size of the disc.
>> Thanks for your help!
>> R.D.
>
> import os, statvfs
> s = os.statvfs(".")
> freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]

Is it worth distinguishing free bytes from available bytes? I've never
seen them differ, and I'm not sure how they ever would...

import os
import statvfs

def free_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]

def avail_bytes(path):
stats = os.statvfs(path)
return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]

if __name__ == '__main__':
import sys
for path in sys.argv[1:]:
print "%s:" % path,
print "%dK free," % (free_bytes(path) / 1024),
print "%dK available" % (avail_bytes(path) / 1024)

DataSmash

2/15/2008 7:52:00 PM

0

On Feb 15, 1:32 pm, Jeff Schwab <j...@schwabcenter.com> wrote:
> Chris wrote:
> > On Feb 15, 7:10 pm, DataSmash <r...@new.rr.com> wrote:
> >> I simply want to capture the free disc space in a variable so that I
> >> can compare changes. I'm aware of a few commands like "df -h" or "du -
> >> k", but I can't figure out how to capture those values as a variable.
> >> I also looked at os.statvfs(), but that output doesn't seem to make
> >> any sense at all to me, knowing the size of the disc.
> >> Thanks for your help!
> >> R.D.
>
> > import os, statvfs
> > s = os.statvfs(".")
> > freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]
>
> Is it worth distinguishing free bytes from available bytes? I've never
> seen them differ, and I'm not sure how they ever would...
>
> import os
> import statvfs
>
> def free_bytes(path):
> stats = os.statvfs(path)
> return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]
>
> def avail_bytes(path):
> stats = os.statvfs(path)
> return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]
>
> if __name__ == '__main__':
> import sys
> for path in sys.argv[1:]:
> print "%s:" % path,
> print "%dK free," % (free_bytes(path) / 1024),
> print "%dK available" % (avail_bytes(path) / 1024)


Chris,
Much thanks. That's just what I need.

Jeff,
Not sure what's taking up the "available" space, but it's about 12GB
on my system.
Interesting.

Thanks.

Jeff Schwab

2/15/2008 8:03:00 PM

0

DataSmash wrote:
> On Feb 15, 1:32 pm, Jeff Schwab <j...@schwabcenter.com> wrote:
>> Chris wrote:
>>> On Feb 15, 7:10 pm, DataSmash <r...@new.rr.com> wrote:
>>>> I simply want to capture the free disc space in a variable so that I
>>>> can compare changes. I'm aware of a few commands like "df -h" or "du -
>>>> k", but I can't figure out how to capture those values as a variable.
>>>> I also looked at os.statvfs(), but that output doesn't seem to make
>>>> any sense at all to me, knowing the size of the disc.
>>>> Thanks for your help!
>>>> R.D.
>>> import os, statvfs
>>> s = os.statvfs(".")
>>> freebytes = s[statvfs.F_BSIZE] * s[statvfs.F_BAVAIL]
>> Is it worth distinguishing free bytes from available bytes? I've never
>> seen them differ, and I'm not sure how they ever would...
>>
>> import os
>> import statvfs
>>
>> def free_bytes(path):
>> stats = os.statvfs(path)
>> return stats[statvfs.F_BSIZE] * stats[statvfs.F_BFREE]
>>
>> def avail_bytes(path):
>> stats = os.statvfs(path)
>> return stats[statvfs.F_BSIZE] * stats[statvfs.F_BAVAIL]
>>
>> if __name__ == '__main__':
>> import sys
>> for path in sys.argv[1:]:
>> print "%s:" % path,
>> print "%dK free," % (free_bytes(path) / 1024),
>> print "%dK available" % (avail_bytes(path) / 1024)
>
>
> Chris,
> Much thanks. That's just what I need.
>
> Jeff,
> Not sure what's taking up the "available" space, but it's about 12GB
> on my system.
> Interesting.

Available space is how much you can actually access as a non-root user.
Apparently (thank you Jean-Paul), space can be reserved for superuser
use only; such space is "free," but not "available."

I'm not sure how superuser-only space would be reserved in the first
place. I don't see anything relevant in the fdisk man page.

Christian Heimes

2/15/2008 9:59:00 PM

0

Jeff Schwab wrote:
> I'm not sure how superuser-only space would be reserved in the first
> place. I don't see anything relevant in the fdisk man page.

man mkfs

:)

Christian

Matthew Woodcraft

2/15/2008 10:02:00 PM

0

In article <iuudnTXnNsFPcijanZ2dnUVZ_tmhnZ2d@comcast.com>,
Jeff Schwab <jeff@schwabcenter.com> wrote:
> Available space is how much you can actually access as a non-root user.
> Apparently (thank you Jean-Paul), space can be reserved for superuser
> use only; such space is "free," but not "available."

> I'm not sure how superuser-only space would be reserved in the first
> place. I don't see anything relevant in the fdisk man page.

Look at mkfs.<whatever-your-filesystem-is>

-M-

Jeff Schwab

2/15/2008 10:11:00 PM

0

Christian Heimes wrote:
> Jeff Schwab wrote:
>> I'm not sure how superuser-only space would be reserved in the first
>> place. I don't see anything relevant in the fdisk man page.
>
> man mkfs
>
> :)

Thank you.

Looks like the feature is only supported by particular file systems. I
don't see anything at mkfs(8), but I do (for example) see the -m flag at
mke2fs(8).

What I've done in the past is to make the boot partition big enough for
emergency, super-user system administration. In the default boot
configuration, I just don't mount /boot. When the other partitions get
filled up by some runaway process (which happens with surprising (to me)
frequency), I mount the boot partition so I have some breathing room. I
guess the formally reserved blocks in the filesystem are meant to serve
the same purpose.

Steve Holden

2/15/2008 10:12:00 PM

0

Jeff Schwab wrote:
> I'm not sure how superuser-only space would be reserved in the first
> place. I don't see anything relevant in the fdisk man page.

The UFS and ext2 filesystem space allocation routines become very
inefficient when free space gets too low, so for regular uses the
filesystem is considered full before that threshold is reached. You can
adjust the threshold setting (amon others) with tunefs.

Root uid processes can continue to use disk space after that point so
that various daemon processes don't stop, and so that recovery actions
can be taken.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.hold...

Jeff Schwab

2/15/2008 11:45:00 PM

0

Steve Holden wrote:
> Jeff Schwab wrote:
>> I'm not sure how superuser-only space would be reserved in the first
>> place. I don't see anything relevant in the fdisk man page.
>
> The UFS and ext2 filesystem space allocation routines become very
> inefficient when free space gets too low, so for regular uses the
> filesystem is considered full before that threshold is reached. You can
> adjust the threshold setting (amon others) with tunefs.

Live and learn. I've been using primarily reiserfs for a while now,
which may be why my free blocks always == available blocks.

> Root uid processes can continue to use disk space after that point so
> that various daemon processes don't stop, and so that recovery actions
> can be taken.