2017-10-26 13 views
1

に私が使用してサーバを起動します。ただし、アルファベット順に表示されます。メイクのpython SimpleHTTPServerリストのサブディレクトリがトップ

ファイルの前にサブディレクトリがリストされていても、両方のグループがアルファベット順にソートされているWindowsシェルスタイルにすることはできますか?

+0

私はそれが動作しているかどうかを教えてください –

答えて

1

SimpleHTTPServer.pyファイルを変更する必要があります。以下の機能をいくつか変更しました。あなたは交換してチェックすることができます

def list_directory(self, path): 
    """Helper to produce a directory listing (absent index.html). 

    Return value is either a file object, or None (indicating an 
    error). In either case, the headers are sent, making the 
    interface the same as for send_head(). 

    """ 
    lst1=[] 
    lst2=[] 
    try: 
     list = os.listdir(path) 
     for i in list: 
      if os.path.isdir(os.path.join(path,i)): 
       lst1.append(i) 
      elif os.path.isfile(os.path.join(path,i)): 
       lst2.append(i) 
    except os.error: 
     self.send_error(404, "No permission to list directory") 
     return None 
    lst1.sort(key=lambda a: a.lower()) 
    #print lst1 
    #print list 
    lst2.sort(key=lambda a: a.lower()) 
    f = StringIO() 
    displaypath = cgi.escape(urllib.unquote(self.path)) 
    f.write('<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">') 
    f.write("<html>\n<title>Directory listing for %s</title>\n" % displaypath) 
    f.write("<body>\n<h2>Directory listing for %s</h2>\n" % displaypath) 
    f.write("<hr>\n<ul>\n") 
    for name in lst1: 
     fullname = os.path.join(path, name) 
     displayname = linkname = name 
     # Append/for directories or @ for symbolic links 
     if os.path.isdir(fullname): 
      displayname = name + "/" 
      linkname = name + "/" 
     f.write('<li><a href="%s">%s</a>\n' 
       % (urllib.quote(linkname), cgi.escape(displayname))) 
    for name in lst2: 
     fullname = os.path.join(path, name) 
     displayname = linkname = name 
     # Append/for directories or @ for symbolic links 
     if os.path.islink(fullname): 
      displayname = name + "@" 
      # Note: a link to a directory displays with @ and links with/
     f.write('<li><a href="%s">%s</a>\n' 
       % (urllib.quote(linkname), cgi.escape(displayname))) 

    f.write("</ul>\n<hr>\n</body>\n</html>\n") 
    length = f.tell() 
    f.seek(0) 
    self.send_response(200) 
    self.send_header("Content-type", "text/html") 
    self.send_header("Content-Length", str(length)) 
    self.end_headers() 
    return f 
+0

完璧!ありがとうSandeep。あなたの答えを少し修正して2つのリストを 'list'に連結し、その下の元のコードを続けます。 –

+0

また、サブディレクトリに移動したときに、親ディレクトリを指すように、リストの最上部にリンク(「..」など)を追加する方法も表示できますか? –

+0

知っておきたいことは:-)私は '..'を表示することを確認し、あなたに知らせます –