newb Q

Toy gee308 at mediaone.net
Sat Jul 22 02:46:03 EDT 2000


I just tried to use os.system, and I couldn't get it to work.
import os
test = 'eth0'
os.system('ifconfig',test)
results:
Traceback (innermost last):
  File "<stdin>", line 1, in ?
TypeError: string, tuple

How can I do the ifconfig while also passing variables?  Thanks.

Toy wrote:

> Thanks for showing me how to do that.  I tried to edit something, but it
> didn't work, I'll show you:
>
> def getMyAddr():
>   object = raw_input(Which device is connect to the internet(i.e. ppp0, eth0,
> ne3: ")
>   p=os.popen("/sbin/ifconfig",object)
>
> Is it possible to do that?  Will it work with os.system?  What are the
> differences bewteen using os.popen and os.system?  Thanks for your time.
> BTW, I only compared OpenBSD 2.7, Linux 2.2.15, and FreeBSD 4.0, but it seems
> if you do the string search  on ifconfig with find text on 1 line beginning
> with inet and ending with mask, It looks like you can get the IP from those 3
> machines.(of coure I still can't write some code to actually do it).  Thanks
> again.
> Jason Toy
>
> Matthew Dixon Cowles wrote:
>
> > In article <3978FD9D.B08460CB at mediaone.net>, Toy <gee308 at mediaone.net>
> > wrote:
> >
> > > How can I make python issue the command, "ifconfig -a eth0", and then
> > > parse the data to grab the IP?  I would think that you could tell Python
> > > to look for the word, 'inet addr:"(is it different on different Unixes?)
> > > and then tell it to get a number right after 'inet addr' that looks like
> > > xx.x.xxx.xxx !!  Simple Q, but I'm new, thanks.
> >
> > Something like this should work for you:
> >
> > import os
> > import string
> > import re
> > import sys
> >
> > def getMyAddr():
> >   p=os.popen("/sbin/ifconfig ep0")
> >   l=p.readline()
> >   while l<>"":
> >     if string.strip(l)[:5]=="inet ":
> >       matchObj=re.search("\d+.\d+.\d+.\d+",l)
> >       p.close()
> >       return matchObj.group(0)
> >     l=p.readline()
> >   p.close()
> >   return "not found"
> >
> > def main():
> >   print getMyAddr()
> >
> > if __name__=="__main__":
> >   main()
> >
> > You'll also notice that the answer to your second question is yes. The
> > format of the output of ifconfig is different from Unix to Unix. The
> > above example works on FreeBSD. You will need to fiddle it some to get
> > it to work under Linux.
> >
> > Another way to get the local IP is to use the functions in the socket
> > module:
> >
> > >>> import socket
> > >>> socket.gethostbyaddr(socket.gethostname())[2][0]
> >
> > But how to do that varies from machine to machine too. The code above
> > works correctly on my FreeBSD box but on my Linux laptop it returns
> > 127.0.0.1. In order to make it work right on that machine, I need to
> > ask for the address of the hostname only, not the FQDN:
> >
> > >>> socket.gethostbyaddr(socket.gethostname()
> > >>>   [:string.find(socket.gethostname(),".")])[2][0]
> >
> > If there's a portable way of getting the local IP address, I don't know
> > what it is.
> >
> > Regards,
> > Matt




More information about the Python-list mailing list