Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- from __future__ import print_function, unicode_literals
- import argparse
- parser = argparse.ArgumentParser(description="Sends the provided 3dsx file to the hbmenu.")
- parser.add_argument(dest='file', action='store',
- help="Sends the specified file.")
- parser.add_argument(dest='address', action='store',
- help="Address to send the file.")
- parser.add_argument(dest='port', action='store', type=int, nargs="?", default=9000)
- args = parser.parse_args()
- import sys, socket, time, contextlib
- # Check arguments
- if ":" in args.address:
- args.address, port = args.address.split(":", 1)
- if port:
- if port.isdigit():
- args.port = int(port)
- else:
- raise ValueError("'{}' is an invalid port")
- print("Checking '{}'".format(args.file))
- with open(args.file, 'rb') as f:
- # Get file size
- f.seek(0, 2)
- fSize = f.tell()
- f.seek(0, 0)
- print("'{}': {} bytes".format(args.file, fSize))
- if fSize <= 0:
- sys.exit("Empty file")
- print("Connecting to {}:{}...".format(args.address, args.port))
- s = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0)
- s.connect((args.address, args.port))
- print("Connected!")
- @contextlib.contextmanager
- def statusline(endMsg=""):
- yield
- sys.stdout.write("\n")
- if endMsg:
- print(endMsg)
- bSize = -1
- try:
- with statusline():
- write, flush, d = sys.stdout.write, sys.stdout.flush, len("{:,}".format(fSize))
- # sent = 0
- fSent = 0
- buffer = b""
- e = 0
- while fSent < fSize:
- c = f.tell()
- if c < fSize:
- # if bSize <= 0 and len(buffer) <= sent:
- # buffer = f.read()
- # sent = 0
- # elif len(buffer) - sent < bSize:
- # buffer = buffer[sent:]+f.read(min(bSize, fSize - c))
- # sent = 0
- if bSize <= 0 and not len(buffer):
- buffer = f.read()
- elif len(buffer) < bSize:
- buffer += f.read(min(bSize, fSize - c))
- # a = s.send(buffer[sent:])
- # sent += a
- # fSent += a
- a = s.send(buffer)
- buffer = buffer[a:]
- fSent += a
- if time.time() - e > 1:
- write('\rSending... {: >{},} / {:,} bytes ({: >.3}%) '.format(fSent, d, fSize, fSent * 100.0 / fSize))
- flush()
- e = time.time()
- except:
- print("Aborted!")
- raise
- finally:
- s.close()
- sys.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement