Perl“import os”Python等价?

时间:2012-03-15 06:45:16

标签: linux perl

我想直接从perl与linux接口,执行一些调用,如statvfs。我很好奇是否有一种方法只使用核心perl包(没有额外的模块)。

特别是,我想获取没有安装/启用df的服务器的磁盘使用信息。

2 个答案:

答案 0 :(得分:3)

想到了{p> use POSIX;。但是,statvfs不属于它提供的功能。也许你在这里寻找use Filesys::Df;

我还没有看到一个安装了perl但没有安装coreutils(df)的系统......

答案 1 :(得分:2)

  

我想直接从perl与linux接口,执行一些调用,如statvfs。我很好奇是否有一种方法只使用核心perl包(没有额外的模块)。

对你的问题的技术但可能不是很有用的答案是肯定的,确实存在一种方法来执行 statvfs 对核心perl和没有模块所做的事情。它的工作原理如下:

my $statfs_buffer = "\0" x length(pack($STATFS_TEMPLATE, ()));
my $retval = syscall($SYS_statfs, $some_filename, $statfs_buffer);
if ($retval == -1) {
    die "statfs failed: $!";
}
my($f_type,   $f_bsize, $f_blocks, $f_bfree,
   $f_bavail, $f_files, $f_ffree,
   $f_fsid,   $f_namelen) = unpack($STATFS_TEMPLATE, $statfs_buffer);

问题是你必须自己弄清$SYS_statfs$STATFS_TEMPLATE的值;前者很容易,而后者并不难。

但是,在某些系统上,您必须使用statfs64变体。

所以是的,只要您足够坚定,就可以可能做你想做的事。不过,有更好的方法可以做到这一点。