是否有更優雅/系統/未來的證明方式來調用if __name__ == '__main__'
中的所有代碼比複製/過去更好?在python中啓動SimpleHTTPServer
我正在將我的bash腳本轉換爲python。我們使用的兩個命令是python -m SimpleHTTPServer YOUR_PORT
和python -m http.server YOUR_PORT
。
在2.x中翻譯它相當乾淨。
if __name__ == '__main__':
test()
我的代碼來模擬主:
import SimpleHTTPServer
SimpleHTTPServer.test()
在3.x的翻譯,這是不乾淨的。
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--cgi', action='store_true',
help='Run as CGI Server')
parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',
help='Specify alternate bind address '
'[default: all interfaces]')
parser.add_argument('port', action='store',
default=8000, type=int,
nargs='?',
help='Specify alternate port [default: 8000]')
args = parser.parse_args()
if args.cgi:
handler_class = CGIHTTPRequestHandler
else:
handler_class = SimpleHTTPRequestHandler
test(HandlerClass=handler_class, port=args.port, bind=args.bind)
我的代碼來模擬主:
import argparse
import http.server
from http.server import CGIHTTPRequestHandler, SimpleHTTPRequestHandler
parser = argparse.ArgumentParser()
parser.add_argument('--cgi', action='store_true',
help='Run as CGI Server')
parser.add_argument('--bind', '-b', default='', metavar='ADDRESS',
help='Specify alternate bind address '
'[default: all interfaces]')
parser.add_argument('port', action='store',
default=8000, type=int,
nargs='?',
help='Specify alternate port [default: 8000]')
args = parser.parse_args()
if args.cgi:
handler_class = CGIHTTPRequestHandler
else:
handler_class = SimpleHTTPRequestHandler
http.server.test(HandlerClass=handler_class, port=args.port, bind=args.bind)
oof。這很聰明!但是,正如你所暗示的那樣,我希望能夠提供一點解決方案。 – 2015-04-03 16:30:46
@StevenWexler有一種替代解決方案完全避免了「importlib」模塊。此外,第二個設計被細化爲一個效用函數,對於用Python編寫的任何模塊可能都是有用的。 – 2015-04-03 17:01:26
我喜歡'exec_module'! – 2015-04-03 17:12:01