LINUX.ORG.RU

Ответ на: комментарий от Irma

Теперь попробуй объяснить, почему ты не пошел в гугель сам.

Я там был и не понял.

пытался использовать os.statvfs(/dev/sda1), но не разобрался с возвращаемыми параметрами. (i.f_blocks - i.f_bfree) * i.f_bsize возвращает фигню.

И, блин, ответ, типа: RTFM много говорит об отвечающем…

«В гугле забанили?» - из той же серии.

Если не чего сказать, то лучше промолчать

PS Забыл указать, что нужно пользоваться лишь стандартными библиотеками.

HighMan
() автор топика
Последнее исправление: HighMan (всего исправлений: 1)
Ответ на: комментарий от Irma

Там и пример есть. На крайняк, есть же нейронки, которые такую ерунду уже умеют сами.

https://qna.habr.com/q/470970

Вы это имеете в виду?

Как я написал выше, не разобрался с os.statvfs(/dev/sda1), а способ с psutil мне не подходит. Нет такого в стандартной поставке Python3

HighMan
() автор топика
Ответ на: комментарий от HighMan

(i.f_blocks - i.f_bfree) * i.f_bsize возвращает фигню.

В искусстве написания программ нет такого термина как фигня. Написанное вами выражение, возвращает вам какое-то число, а не фигню, хорошо бы это число привести в этой теме (так как телепаты в отпуске) и написать почему вы решили что это число неправильное, а заодно и вывести по отдельности i.f_blocks и пр чтобы определить какое из не соответствует реальному положению дел. В общем, если вы слышали что-то о такой программе как дебаггер питона, самое время изучить её, и с её помощью заняться отладкой вашего кода. Вполне возможно и такое что вы обнаружили редкий баг питона, тогда было бы хорошо сообщить об этом разработчикам.

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)

Поскольку ты уже знаешь про statvfs, то рекомендую почитать подробнее документацию к этой функции. Подсказка: смотри, что она принимает в качестве аргумента.

Таким образом задача сведётся к тому, как преобразовать твоё /dev/sda1 в то что принимает statvfs.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от mydibyje

В искусстве написания программ нет такого термина как фигня. Написанное вами выражение, возвращает вам какое-то число, а не фигню, хорошо бы это число привести в этой теме (так как телепаты в отпуске) и написать почему вы решили что это число неправильное, а заодно и вывести по отдельности i.f_blocks и пр чтобы определить какое из не соответствует реальному положению дел. В общем, если вы слышали что-то о такой программе как дебаггер питона, самое время изучить её, и с её помощью заняться отладкой вашего кода. Вполне возможно и такое что вы обнаружили редкий баг питона, тогда было бы хорошо сообщить об этом разработчикам.

os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=32945288, f_bfree=32945264, f_bavail=32945264, f_files=32945288, f_ffree=32944629, f_favail=32944629, f_flag=4096, f_namemax=255)

df /dev/sda2
Filesystem      Size  Used Avail Use% Mounted on
/dev/md126      2.0G   31M  1.8G   2% /boot
HighMan
() автор топика
Ответ на: комментарий от eternal_sorrow

Таким образом задача сведётся к тому, как преобразовать твоё /dev/sda1 в то что принимает statvfs.

(function) def statvfs(path: FileDescriptorOrPath) -> statvfs_result

Принимает файловый дескриптор ИЛИ путь!

HighMan
() автор топика
Ответ на: комментарий от HighMan

Я так понял, что к файлу блочного устройства.

нет. в таком случае ты получишь свойства виртуальной файловой системы /dev. Это скорее всего не то что ты хочешь.

Или просто файлу, например /etc/fstab

Да. Файлу на той файловой системе, свойства которой ты хочешь получить.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от eternal_sorrow

Да. Файлу на той файловой системе, свойства которой ты хочешь получить.

Таак… значит, если устройство не смонтировано, то определить размер не получится?

f = os.open('/dev/sda2', os.O_RDONLY)
i = os.statvfs(f)
os.close(f)

Возвращает то же самое, что os.statvfs(‘/dev/sda2’)

Выходит, что для определения занятого места нужно обязательно монтировать устройство и давать на вход файл, расположенный на этом устройстве?

HighMan
() автор топика
Ответ на: комментарий от HighMan

Таак… значит, если устройство не смонтировано, то определить размер не получится?

Конечно нет. По крайней мере не таким образом. statvfs получает свойства смонтированных файловых систем. Читай документацию.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от HighMan

Значит теперь надо узнать, есть ли в вашей системе место соответствующее ~135 ГБ (кои получились из f_bsize * f_blocks). Тогда поймём, к чему же обращается statvfs при передаче ей параметра /dev/sda.

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 2)
Ответ на: комментарий от eternal_sorrow

Поскольку ты уже знаешь про statvfs, то рекомендую почитать подробнее документацию к этой функции.

man statvfs

     int
     statvfs(const char	* restrict path, struct	statvfs	* restrict buf);

     int
     fstatvfs(int fd, struct statvfs *buf);

DESCRIPTION
     The statvfs() and fstatvfs() functions fill the structure pointed to by
     buf with garbage.

Так что как раз «фигня».

firkax ★★★★★
()
Ответ на: комментарий от HighMan

И, блин, ответ, типа: RTFM много говорит об отвечающем…

Судя по количеству и качеству постов, которые ты создал с момента своей регистрации на форуме в ноябре 22 года, ты не способен к самостоятельной работе.

little_fox
()