aman
aman

Reputation: 11

interface = popen('ifconfig | awk \'/eth0/ {print $1}\'').read()

Does anybody know about this Python script? What it does?

interface = popen('ifconfig | awk \'/eth0/ {print $1}\'').read()

Upvotes: 1

Views: 443

Answers (2)

totoro
totoro

Reputation: 2456

$ ifconfig

Will print something like:

eth0      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
...

this will be piped into awk which will match the line with eth0 by using the pattern /eth0/ and print the first field which will be eth0 in this case.

popen reads the output from this shell script into Python.

So if you have an eth0 interface interface will be eth0 in Python, and if you don't have an eth0 interface interface will be the empty string in Python.

So my guess is that it looks if eth0 is present on the system and will use it as default if available.

Upvotes: 1

VPfB
VPfB

Reputation: 17342

Both ifconfig and awk are standard Unix/Linux commands. (The ifconfig has a replacement already, but is still used quite often).

In the shell command ifconfig | awk '/eth0/ {print $1}' the former command prints information about system's network interfaces and the latter is a filter which prints only the first field (basically first word) from each record (i.e. text line here) matching the eth0 literal string. The awk is a powerfull text processing tool. Its comprehensive manual has a size of a small book.

This shell command has a Python wrapper that runs it in a separate process and reads the resulting output. popen must be imported from os if you want to try it.

eth0 is the traditional name of the first ethernet interface. The result is probably this name maybe followed by a colon and a newline. Network aliases like eth0:0 will be included as well. It works only on systems using a naming scheme where eth0 is used. E.g. Linux used such interface names in the past, but a different and more predictable naming scheme is now standard.

That's all what it does. I don't know the intended usage, but personally I find the code not reliable and inefficient.

Upvotes: 0

Related Questions