SSH2 Python Как распознать, когда файл является каталогом - PullRequest
0 голосов
/ 30 сентября 2019

Я конвертирую свою программу на python из paramiko в ssh2. Мне удалось пройти проверку подлинности, и я могу получить список каталогов. Я застрял в процессе обработки списка каталогов, как узнать, является ли «файл» каталогом или файлом. Я вижу атрибуты, но из тех, что я могу видеть только в то время, что я хочу использовать (чтобы узнать, сколько лет файлу). После того, как я сделал opendir и readdir (и, следовательно, у меня есть список файлов), как я узнаю, является ли каждый файл файлом или каталогом?

Когда я выполняю readdir, мне возвращается:

  • Длина имени файла
  • имя файла
  • атрибуты
    • atime
    • размер файла
    • flags
    • gid
    • mtime
    • права доступа
    • uid

1 Ответ

1 голос
/ 30 сентября 2019

Сам не использовал ssh2-python , но я бы сказал, чтобы проверить содержимое flags. В соответствии с документацией библиотеки (согласно предложению @NullPointerException) возможными значениями являются:

LIBSSH2_SFTP_S_IFMT Тип маски файла

LIBSSH2_SFTP_S_IFIFO Именованный канал (fifo)

LIBSSH2_SFTP_S_IFCHR Специальный символ (символьное устройство)

LIBSSH2_SFTP_S_IFDIR Каталог

LIBSSH2_SFTP_S_IFBLK Специальный блок (блочное устройство)

LIFSS_F_S_F_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_F_S_S_F_S_F_S_F_S_F_S_S_F_S_F_S_S_F_S_F_S_S_F_S_F_S_S_F_S_F_S_S_F_S_F_S_F_S_Fссылка

LIBSSH2_SFTP_S_IFSOCK Сокет

Я бы сказал, flags - это битовое поле, и вы должны проверить, включен ли определенный флаг, с помощью побитового оператора, например,чтобы проверить это каталог:

flags & LIBSSH2_SFTP_S_IFDIR == LIBSSH2_SFTP_S_IFDIR
...