On 15/09/12 18:20:42, Dan Katorza wrote: > בתאריך יום רביעי, 12 בספטמבר 2012 17:24:50 UTC+3, מאת Dan Katorza: >> hello , >> >> >> >> i'm new to Python and i searched the web and could not find an answer for my >> issue. >> >> >> >> i need to get an ip address from list of hostnames which are in a textfile. >> >> >> >> this is what i have so far >> >> -------------------------------------------------------------------------- >> >> #!/usr/bin/env python >> >> #Get the IP Address >> >> >> >> import socket >> >> hostname = 'need it to read from a text file' >> >> addr = socket.gethostbyname(hostname) >> >> print 'The address of ', hostname, 'is', addr >> >> >> >> --------------------------------------------------------------------------- >> >> >> >> any idea ? >> >> sorry for my english >> >> >> >> thanks. > > hello again friends, > thanks for everyone help on this. > i guess i figured it out in two ways. > the second one i prefer the most. > > i will appreciate if someone can give me some tips. > thanks again > > so... > ------------------------------------------------------------- > First > ------------------------------------------------------------- > #!/usr/bin/env python > #Get the IP Address > > > print("hello, please enter file name here >"),
Instead of printing this string, you can pass it as the argument to raw_input: for line in open(raw_input("hello, please enter file name here> ")): Cosmetically, I'd prefer a space after the '>'. > import socket PEP 8 recommends putting all imports at the top of the file, like you do in your second script. > for line in open(raw_input()): > hostname = line.strip() > print("IP address for {0} is > {1}.".format(hostname,socket.gethostbyname(hostname))) To my mind, this line does two things: it finds the IP address and prints it. I think it would be more readable to do these on separate lines: ip_address = socket.gethostbyname(hostname) print("IP address for {0} is {1}.".format(hostname, ip_address) This forces you to find a good name for the value returned by gethostbyname, which I consider a Good Thing (tm). PEP 8 recommends that lines should not be longer than 80 characters. Your line is longer than that; splitting it in two conceptual steps nicely solves that issue as well. > ------------------------------------------------------------ > second > ------------------------------------------------------------ > #!/usr/bin/env python > #Get the IP Address > > import os > > print("Hello, please enter file name here >"), > FILENAME = raw_input() PEP 8 recommends all upper case for constants, for example socket.IPPROTO_IPV6. The filename here is not a hard-wired constant, so it should be in lower case. > if os.path.isfile(FILENAME): Your first script allowed me to enter "/dev/tty" at the prompt, and then type a bunch of hostnames and an end-of-file character. This script reports "FIle is missing or not reasable", because /dev/tty is not a regular file. I think the message should be "File is missing or not readable or not a regular file". I'm always annoyed when I get an error message with several "or"s in it. I prefer programs that figure out which of the three potential issues is the case, and mention only one cause. > print("\nFile Exist!") > print("\nGetting ip from host name") > print("\n") > import socket > for line in open (FILENAME): > hostname = line.strip() > print("IP address for {0} is > {1}.".format(hostname,socket.gethostbyname(hostname))) > else: > print ("\nFinished the operation") > else: > print ("\nFIle is missing or is not reasable"), You don't want a comma at the end of this line: it messes up the next shell prompt. Also, this line a rather far away from the test that triggers it. How about: filename = raw_input("Hello, please enter file name here> ") if not os.path.isfile(filename): if not os.exist(filename): print("\nFile {} does not exist") else: print("\nFile {} is not a regular file") sys.exit(1) print("\nFile {} exists", filename) # etc. Or you could skip the whole 'os' thing and use a try/except construct instead: #!/usr/bin/env python #Get the IP Address import sys, socket filename = raw_input("Hello, please enter file name here> ") try: infile = open(filename) except EnvironmentError as e: print(e) sys.exit(1) print("\nFile {} exists!".format(filename)) print("\nGetting IP addresses for hosts") print("\n") for line in infile: hostname = line.strip() try: ip_address = socket.gethostbyname(hostname) except EnvironmentError as e: print("Couldn't find IP address for {}: {}".format(hostname, e)) continue print("IP address for {0} is {1}.".format(hostname, ip_address)) else: print ("\nFinished the operation") Using try/except has the advantage that it will correctly report issues you didn't think about (for example, if file exists, but you don't have permission to read it). Hope this helps -- HansM -- http://mail.python.org/mailman/listinfo/python-list