| #! /usr/bin/env python | |
| # Python interface to the Internet finger daemon. | |
| # | |
| # Usage: finger [options] [user][@host] ... | |
| # | |
| # If no host is given, the finger daemon on the local host is contacted. | |
| # Options are passed uninterpreted to the finger daemon! | |
| import sys, string | |
| from socket import * | |
| # Hardcode the number of the finger port here. | |
| # It's not likely to change soon... | |
| # | |
| FINGER_PORT = 79 | |
| # Function to do one remote finger invocation. | |
| # Output goes directly to stdout (although this can be changed). | |
| # | |
| def finger(host, args): | |
| s = socket(AF_INET, SOCK_STREAM) | |
| s.connect((host, FINGER_PORT)) | |
| s.send(args + '\n') | |
| while 1: | |
| buf = s.recv(1024) | |
| if not buf: break | |
| sys.stdout.write(buf) | |
| sys.stdout.flush() | |
| # Main function: argument parsing. | |
| # | |
| def main(): | |
| options = '' | |
| i = 1 | |
| while i < len(sys.argv) and sys.argv[i][:1] == '-': | |
| options = options + sys.argv[i] + ' ' | |
| i = i+1 | |
| args = sys.argv[i:] | |
| if not args: | |
| args = [''] | |
| for arg in args: | |
| if '@' in arg: | |
| at = string.index(arg, '@') | |
| host = arg[at+1:] | |
| arg = arg[:at] | |
| else: | |
| host = '' | |
| finger(host, options + arg) | |
| # Call the main function. | |
| # | |
| main() |