From 121efd5faed4c5faee923ff0f1f15e942e2cb27f Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Thu, 20 Oct 2011 16:58:56 +0200 Subject: adds stdin support --- woof | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/woof b/woof index 5f68177..2d6b1ea 100755 --- a/woof +++ b/woof @@ -123,7 +123,7 @@ class FileServHTTPRequestHandler (BaseHTTPServer.BaseHTTPRequestHandler): server_version = "Simons FileServer" protocol_version = "HTTP/1.0" - filename = "." + filename = "-" def log_request (self, code='-', size='-'): if code == 200: @@ -272,9 +272,11 @@ class FileServHTTPRequestHandler (BaseHTTPServer.BaseHTTPRequestHandler): type = "file" elif os.path.isdir (self.filename): type = "dir" + elif self.filename == "-": + type = "stdin" if not type: - print >> sys.stderr, "can only serve files or directories. Aborting." + print >> sys.stderr, "can only serve files, directories or stdin. Aborting." sys.exit (1) self.send_response (200) @@ -308,6 +310,9 @@ class FileServHTTPRequestHandler (BaseHTTPServer.BaseHTTPRequestHandler): tfile.add (self.filename, arcname=os.path.basename(self.filename)) tfile.close () + elif type == "stdin": + datafile = sys.stdin + shutil.copyfileobj (datafile, self.wfile) except Exception, e: print e print >>sys.stderr, "Connection broke. Aborting" @@ -345,13 +350,14 @@ def serve_files (filename, maxdown = 1, ip_addr = '', port = 8080): def usage (defport, defmaxdown, errmsg = None): name = os.path.basename (sys.argv[0]) print >>sys.stderr, """ - Usage: %s [-i ] [-p ] [-c ] + Usage: %s [-i ] [-p ] [-c ] [] %s [-i ] [-p ] [-c ] [-z|-j|-Z|-u] %s [-i ] [-p ] [-c ] -s %s [-i ] [-p ] [-c ] -U Serves a single file times via http on port on IP address . + When no filename is specified, or set to '-', then stdin will be read. When a directory is specified, an tar archive gets served. By default it is gzip compressed. You can specify -z for gzip compression, -j for bzip2 compression, -Z for ZIP compression or -u for no compression. @@ -388,6 +394,8 @@ def usage (defport, defmaxdown, errmsg = None): def main (): global cpid, upload, compressed + filename = '-' + maxdown = 1 port = 8080 ip_addr = '' @@ -473,18 +481,18 @@ def main (): else: if len (filenames) == 1: - filename = os.path.abspath (filenames[0]) - else: - usage (defaultport, defaultmaxdown, - "Can only serve single files/directories.") + if filenames[0] != "-": + filename = os.path.abspath (filenames[0]) - if not os.path.exists (filename): - usage (defaultport, defaultmaxdown, - "%s: No such file or directory" % filenames[0]) + if not os.path.exists (filename): + usage (defaultport, defaultmaxdown, + "Can only serve single files/directories.") - if not (os.path.isfile (filename) or os.path.isdir (filename)): - usage (defaultport, defaultmaxdown, - "%s: Neither file nor directory" % filenames[0]) + if not (os.path.isfile (filename) or os.path.isdir (filename)): + usage (defaultport, defaultmaxdown, + "%s: Neither file nor directory" % filenames[0]) + else: + filename = "-" serve_files (filename, maxdown, ip_addr, port) -- cgit v1.2.3