Как поднять сервер для python скриптов за 1 минуту

    Ола, амигос!
    Недавно в топике Мешок банальных советов комментатор alexanderyastrebov предложил простой способ запустить простой http-сервер с помощью 1й строчки в консоли.
    Я решил попробовать найти, можно ли на нем запускать еще и питоновские скрипты, и вы, читая этот топик, наверное, уже догадались, что можно.
    Сам сервер запускается одной коммандой:
    python -m CGIHTTPServer
    Как вы можете видеть, по умолчанию он использует 8000й порт и предоставляет доступ к текущей директории терминала. Но скрипты должны запускаться из папки «cgi-bin» текущей директории. Например так:
    localhost:8000/cgi-bin/helloworld.py
    Спасибо за внимание!
    UPD все же напишу, как мне казалось, очевидную вещь: для веб разработки конечно нужен серьезный веб-сервер.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 37
    • +14
      Если хоть немного почитать документацию, то можно и не таки открытия сделать!
      • 0
        Гм, хабр мне никогда не казаля ресурсом, где всех отсылают rtfm. Плюс к этому я эту часть документации уже прочел, когда искал, хотел поделить с другими людьми.
        • +8
          А мне он казался тем ресурсом где сначала читают fm, а потом только открывают свой рот.
          • 0
            Я решил поставить вам плюс в карму, чтобы вам дольше добираться до -1го. >:-)
            • +1
              не беспокойтесь, -1 это относительно рейтинга, а не кармы, и там есть еще задел в пунктов 50 :)
              • +1
                Я боюсь мне это не по-силам. -1 это конечно круто, но обгонять Великого Создателя мне не хочется.
      • 0
        Он выводит stdout?
        • +1
          Так например?
          #!/usr/bin/python
          import sys
          sys.stdout.write("Content-type: text/html\n<html><head></head><body>hello world</body></html>")
          • 0
            Ой, прошу прощения, там две \n а не одна.
            • +1
              Жуть какая. Почитайте про CGI и просто запихните скрипт в cgi-bin директорию апача.

              Совет с передачей файлов через питоновый веб-сервер, ну это не лучший вариант — nc все же удобнее.
              • +1
                Мне создавать HTML файлы не надо. Я отношусь к другой области IT.
                Просто, надо было пару не совсем корректных рсс потоков изменить некорректных из одного источника, чтобы их поняла любимая прога. Может, я об этом еще напишу. Для этого я поднимал lighttpd.
                Для моих целей куда проще сделать так, как в топике, и уж тем более поднимать аппач — стрелять пушкой по воробъям.
                Видимо, мне надо было написать это в топике, чтобы не давали хороших но не релевантных советов типа этого или типа тратить время на чтение мануалов не по моей части айти, которое мне в общем то нужно чтобы читать свои мануалы.
                Тем не менее спасибо за совет.
                • 0
                  Чуть не забыл, яху пайпс можно также не советовать. Он имеет баг(фичу), которая не дают сделать что мне надо (то есть дают, но зачем-то заменяют & на &amp; — да, именно на 2).
                  • 0
                    На &amp;amp то есть заменяет.
            • +2
              Можно так:
              #!/usr/bin/python
              print "Content-type: text/html"
              print
              print "<!doctype html>
              print "<title>HTML5 Minimal Markup Example</title>"
              


              :)

              А вообще очень удивлён, что пост фактически об одной команде на главной.
              • 0
                Я тоже обычно простым принтом пользуюсь. Я просто не очень понял вопрос про стд-аут.
                • 0
                  Я просто подумал что это аналог сервера приложений, например, если написаны какие-то скрипты на питоне, работающие с консолью и выводящие в нее, то можно просто по этому адресу как говорится их запустить и вывод получить. А так получается что это совсем не то, а стандартный CGI.
                  Хотя вообще как вам идея?
                • +1
                  Я специально не стал делать большой топик, и попытался сделать его как можно меньше съедающим времени. У меня есть такой таракан.
                  • 0
                    Наоборот классно то что в одну строку — просто и изящно, мало ли для каких целей понадобится то, про что автор написал, меня пост порадовал с утра.
                  • +5
                    #!/usr/bin/env python
                    
                    import cgi
                    
                    cgi.test()
                    
                • –1
                  Вы вдохновились случаем не у нее?) www.youtube.com/watch?v=cpABtfnZUu0
                  • –3
                    Я вот не питонист, например. Поэтому никакой эйфории от созерцания на главной подобных всё же банальных «кунг-фу» рецептов не испытываю.
                    Поясните, на кой чёрт нужны все эти карманные HTTP-сервера, запускаемые одной строкой/командой? Использовать их для тривиальной передачи файлов, как предлагается в комментарии по ссылке, не вижу абсолютно никакого смысла. Для этого есть куда более годные полноценные SSH/FTP/HTTP клиенты-серверы (развёртывание большинства при том в современных дистрибутивах Linux не занимает более 1 минуты) или же файлообменники.
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • +2
                        вы пишете код без тестирования на своей машине? :)
                        имхо, у веб-разработчиков (а кому еще нужен http-сервер) должен быть локально настроен сервер, не всегда же делать коммит а потом смотреть запустилось ли на препродакшене.
                        • НЛО прилетело и опубликовало эту надпись здесь
                      • +3
                        Ну раз не «питонист», то и не созерцайте и внутрь топика не заходите. в чём проблема то?
                        • 0
                          Я, кстати, свой юзкейс в одном из комментов тоже описывал. Чуть подправить пару кривых рсс потоков чтобы их подхватила прога.
                        • 0
                          Ну и бред… Вообще не понимаю, зачем сегодня, в двадцать первом веке, использовать CGI, который уже много лет как пора выкинуть.
                          Сегодня есть такие замечательные вещи, как FastCGI (тоже уже порядком подустарел и совсем не питоний) и uWSGI, который на сегодня является лучшим способом разворачивать питоньи web-приложения.
                          И самое интересное, что в использовании этого нет ничего сложного. Достаточно поставить, например, flask и радоваться. Т.е. сегодня НЕТ такого юзкейса, чтобы понадобилось такое извращение. А если вы думаете, что есть, значит вы плохо разбираетесь в современных возможностях.
                          • 0
                            Ну напишите топик. Буквально пару недель назад гуглил легковесный сервер для питона, гугл посоветовал ставить лайти. Раз уж вы утрудили себя написать этот негодующий комментарий, подскажите пожалуйста, чем лучше для моего случая ставить что-то из этого чем набрать 1 комманду.
                            • 0
                              Я с этой темой разобрался около года назад и сейчас она мне не интересна. Я думаю, вы понимаете, что писать пост о том, что не интересно, это не самое приятное времяпрепровождение.
                              И вы немного не поняли, что я хочу сказать, а именно, не используйте CGI никогда и нигде. Это технология двадцатилетней давности, у которой есть замечательные альтернативы. Копните в сторону WSGI и конкретно PEP 333. Нужно один раз потратить время и понять, как оно работает, чтобы при виде CGI впадать в ступор со словами «Это что за твою мать? Кто ещё использует ЭТО?».
                              Опять же, для небольших приложений есть замечательный микро-фреймвок Flask, который для разработки имеет свой встроенный http-сервер, а на продакшен прекрасно работает через WSGI. Кстати, все основные современные фреймвоки (pyramid, zope/bb, django...) это умеют.
                          • +4
                            sudo python -m smtpd -n -c DebuggingServer localhost:25
                            а так почтовый сервак поднимается за 1 минуту.
                            • 0
                              и на что он будет способен? :)
                              • 0
                                Всё, что необходимо для отладки отправки email'ов, он умеет. А больше и не надо.
                                • 0
                                  Ну в общем-то он создан для отладки. Действительно удобная штука, чтобы меньше спамить по реальным ящикам.
                                  Правда без нормального боевого тестирования всё равно не обойтись, так как требуется проверить, чтобы ваша рассылка на основных сервисах в спам не попадала. У нас с этим была серьёзная проблема, потому что, например, рамблер не хотел пропускать наши письма о подтверждении регистрации.
                              • –2
                                Напомнило. Только у вас за одну минуту, а тут за две:
                                www.youtube.com/watch?v=Uo_tnvMKjgs
                                • –1
                                  боян.
                                  • 0
                                    Начал осваивать Python, при попытке запустить сервер в Windows:
                                    >python -m CGIHTTPServer
                                    python.exe: No module named CGIHTTPServer


                                    При попытке запуска такого файла:

                                    HOMEDIR = "/"
                                    PORT = 8000

                                    import CGIHTTPServer
                                    import BaseHTTPServer
                                    import os
                                    os.chdir(HOMEDIR)

                                    class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
                                    cgi_directories = ["/cgi"]

                                    httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
                                    print("serving at port", PORT)
                                    httpd.serve_forever()


                                    Выдаёт:

                                    Traceback (most recent call last):
                                    File "server.py", line 4, in import CGIHTTPServer
                                    ImportError: No module named CGIHTTPServer

                                    Как решить эту проблему? В папке Lib есть файл cgi.py.
                                    • 0
                                      а node.js можно так одной строкой в консоли сервер запустить?

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.