Perl "import os" Python equivelant? - PullRequest
       0

Perl "import os" Python equivelant?

2 голосов
/ 15 марта 2012

Я хотел бы взаимодействовать с Linux напрямую из Perl, чтобы выполнить некоторые вызовы, такие как statvfs. Мне любопытно, есть ли способ сделать это только с помощью основного пакета perl (без дополнительных модулей).

В частности, я хотел бы получить информацию об использовании диска для серверов, на которых не установлен / не включен df.

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

use POSIX; приходит на ум.statvfs, однако, не входит в число функций, предлагаемых им.Возможно, вы ищете use Filesys::Df; здесь.

Я еще не видел систему, в которой установлен perl, но не установлен coreutils (df) ...

2 голосов
/ 15 марта 2012

Я бы хотел взаимодействовать с linux напрямую из perl, чтобы выполнить некоторые вызовы, такие как 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.

Так что да, можно делать то, что вы хотите, при условии, что вы достаточно решительны. Однако есть и лучшие способы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...