From c0f5af19d00e2d7398143f22e8a6090ec048eb29 Mon Sep 17 00:00:00 2001 From: Jeff Fisher Date: Thu, 15 Mar 2012 20:53:52 -0600 Subject: [PATCH 1/2] Added support for passing arguments to ssh. Got rid of -l and -p since we can just pass them directly to ssh. --- crussh.py | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/crussh.py b/crussh.py index 909e952..8071665 100755 --- a/crussh.py +++ b/crussh.py @@ -23,17 +23,15 @@ except: sys.exit(1) ### Parse CLI Args ### -parser = argparse.ArgumentParser(description="Connect to multiple servers in parallel.") -parser.add_argument('hosts', metavar='HOST', nargs='+', - help="Host(s) to connect to.") -parser.add_argument('-l', '--login', dest='login', default=None, - help="Login name to use.") -parser.add_argument('-p', '--port', dest='port', type=int, default=None, - help="Alternate SSH port to use.") +parser = argparse.ArgumentParser(description="Connect to multiple servers in parallel.", usage="%(prog)s [OPTIONS] HOST [HOST ...]") parser.add_argument('-s', '--fontsize', dest='fontsize', type=int, default=10, help="Font size to use. (default=10)") -args = parser.parse_args() +(args, hosts) = parser.parse_known_args() + +if len(hosts) == 0: + parser.print_usage() + sys.exit(1) ### CruSSH! ### class CruSSH: @@ -138,9 +136,12 @@ class CruSSH: # give EntryBox default focus on init self.EntryBox.props.has_focus = True - def __init__(self, hosts, login=None, port=None): - self.Config["login"] = login - self.Config["port"] = port + def __init__(self, hosts): + ssh_args = None + if "--" in hosts: + offset = hosts.index("--") + 1 + ssh_args = " ".join(hosts[0:offset]) + hosts = hosts[offset:] # init all terminals for host in hosts: @@ -152,10 +153,8 @@ class CruSSH: # TODO: disable only this terminal widget on child exit # v.connect("child-exited", lambda term: gtk.main_quit()) cmd_str = "/usr/bin/ssh" - if self.Config["login"] != None: - cmd_str += " -l " + args.login - if self.Config["port"] != None: - cmd_str += " -p " + str(args.port) + if ssh_args is not None: + cmd_str += " " + ssh_args cmd_str += " " + host cmd = cmd_str.split(' ') terminal.fork_command(command=cmd[0], argv=cmd) @@ -168,5 +167,5 @@ class CruSSH: self.reflow(force=True) ### Start Execution ### -crussh = CruSSH(args.hosts, args.login, args.port) +crussh = CruSSH(hosts) gtk.main() From f19d1f50ec596c4a40c5edbe6344d13abe1fd074 Mon Sep 17 00:00:00 2001 From: Jeff Fisher Date: Thu, 15 Mar 2012 21:17:10 -0600 Subject: [PATCH 2/2] Moved some of the ssh arguments code out of CruSSH. Made the program a bit more pythonic in case people want to import CruSSH into another program. --- crussh.py | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/crussh.py b/crussh.py index 8071665..77bf22b 100755 --- a/crussh.py +++ b/crussh.py @@ -7,8 +7,6 @@ # Requires: python-gtk2 python-vte import sys -import argparse -import getpass import math try: import gtk @@ -22,17 +20,6 @@ except: error.run() sys.exit(1) -### Parse CLI Args ### -parser = argparse.ArgumentParser(description="Connect to multiple servers in parallel.", usage="%(prog)s [OPTIONS] HOST [HOST ...]") -parser.add_argument('-s', '--fontsize', dest='fontsize', type=int, default=10, - help="Font size to use. (default=10)") - -(args, hosts) = parser.parse_known_args() - -if len(hosts) == 0: - parser.print_usage() - sys.exit(1) - ### CruSSH! ### class CruSSH: ### Config Vars ### @@ -136,13 +123,7 @@ class CruSSH: # give EntryBox default focus on init self.EntryBox.props.has_focus = True - def __init__(self, hosts): - ssh_args = None - if "--" in hosts: - offset = hosts.index("--") + 1 - ssh_args = " ".join(hosts[0:offset]) - hosts = hosts[offset:] - + def __init__(self, hosts, ssh_args=None): # init all terminals for host in hosts: terminal = vte.Terminal() @@ -166,6 +147,27 @@ class CruSSH: self.initGUI() self.reflow(force=True) -### Start Execution ### -crussh = CruSSH(hosts) -gtk.main() +if __name__ == "__main__": + import argparse + + ### Parse CLI Args ### + parser = argparse.ArgumentParser(description="Connect to multiple servers in parallel.", usage="%(prog)s [OPTIONS] HOST [HOST ...]") + parser.add_argument('-s', '--fontsize', dest='fontsize', type=int, default=10, + help="Font size to use. (default=10)") + + (args, hosts) = parser.parse_known_args() + + if len(hosts) == 0: + parser.print_usage() + sys.exit(1) + + if "--" in hosts: + offset = hosts.index("--") + 1 + ssh_args = " ".join(hosts[0:offset]) + hosts = hosts[offset:] + else: + ssh_args = None + + ### Start Execution ### + crussh = CruSSH(hosts, ssh_args) + gtk.main()