Можно ли отобразить размер файла в каталоге, обслуживаемом с использованием http.server в python? - PullRequest
0 голосов
/ 05 мая 2018

Я обработал каталог, используя

python -m http.server

Работает хорошо, но показывает только имена файлов. Можно ли показать даты создания / изменения и размер файла, как вы видите на FTP-серверах?

Я просмотрел документацию для модуля, но не смог найти ничего, связанного с ним.

Спасибо!

1 Ответ

0 голосов
/ 05 мая 2018

http.server предназначен для очень простых случаев использования и служит примером кода. 1 Именно поэтому документы ссылаются прямо на источник.

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

В этом случае вы хотите переопределить list_directory. Вы можете увидеть, как работает версия базового класса, и написать свою собственную версию, которая выполняет другие функции - либо используйте scandir вместо listdir, либо просто вызовите stat для каждого файла, а затем определите, как вы хотите встроить результаты в собственный HTML-код.

Поскольку в этом нет особого смысла, кроме как в качестве учебного упражнения, я не дам вам полный код, но вот скелет:

class StattyServer(http.server.HTTPServer):
    def list_directory(self, path):
        try:
            dirents = os.scandir(path)
        except OSError:
            # blah blah blah
        # etc. up to the end of the header-creating bit
        for dirent in dirents:
            fullname = dirent.path
            displayname = linkname = dirent.name
            st = dirent.stat()
            # pull stuff out of st
            # build a table row to append to r

1. Хотя на самом деле это пример кода для устаревшего и неуклюжего способа построения серверов, так что, возможно, это должно быть «служить примером кода для понимания устаревшего кода, на который вам, вероятно, никогда не придется смотреть, но на всякий случай…».

...