2015-06-20 2 views
-1

Привет Я пытаюсь использовать ipaddress, который является целым числом в этой программе. но мне нужно, чтобы назвать это как строка в response = os.system("ping -c 1 " + hostname + "-I" + str(mystring))целочисленное преобразование строк в ту же программу python

#!/usr/bin/python 
import os 
interface = os.system("ifconfig ge1 | grep UP") 
ip = os.system("ifconfig ge1.1 | grep UP") 
ipaddress = os.system("ifconfig ge1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'") 
print ipaddress 
mystring = repr(ipaddress) 

print mystring 

if interface == 0: 
print interface, ' interface is UP!' 
hostname = "8.8.8.8" 
response = os.system("ping -c 1 " + hostname + "-I" + str(mystring)) 
if response == 0: 
    print hostname, 'is up!' 
else: 
    print hostname, 'is down!' 
else: 
    print interface, ' interface is down!' 
+1

Импорт класса Ipaddress – stark

+0

os.system() возвращает код выхода состояния, а не IP адрес! –

+1

http://stackoverflow.com/questions/24196932/how-can-i-get-the-ip-address-of-eth0-in-python/24196955#24196955 – stark

ответ

0

os.system("ifconfig ge1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'") не вернется к вам IP-адрес вместо EXIT STATUS кода, так что вам нужно использовать модуль, который получает вам IP-адрес вашего интерфейса (eth0 , WLAN0..etc),

по предложению ссылка комментарий @stark, используйте netifaces package или socket module, примеры взяты из this post:

import netifaces as ni 
ni.ifaddresses('eth0') 
ip = ni.ifaddresses('eth0')[2][0]['addr'] 
print ip 

=========================================================================================================== ==========================

import socket 
import fcntl 
import struct 

def get_ip_address(ifname): 
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    return socket.inet_ntoa(fcntl.ioctl(
     s.fileno(), 
     0x8915, # SIOCGIFADDR 
     struct.pack('256s', ifname[:15]) 
    )[20:24]) 

get_ip_address('eth0') 

EDIT-1:

рекомендуется запускать свои команды терминала через subprocess, а не os.system, поскольку я прочитал, что это намного безопаснее.

Теперь, если вы тусклый передать результат ip_address в вашей команде ping, здесь мы идем:

import subprocess 
import socket 
import fcntl 
import struct 

def get_ip_address(ifname): 
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    return socket.inet_ntoa(fcntl.ioctl(
     s.fileno(), 
     0x8915, # SIOCGIFADDR 
     struct.pack('256s', ifname[:15]) 
    )[20:24]) 


hostname = "8.8.8.8" 
cmdping = "ping -c 1 " + hostname + " -I " + get_ip_address('eth0') 

p = subprocess.Popen(cmdping, shell=True, stderr=subprocess.PIPE) 

#The following while loop is meant to get you the output in real time, not to wait for the process to finish until then print the output. 

while True: 
    out = p.stderr.read(1) 
    if out == '' and p.poll() != None: 
     break 
    if out != '': 
     sys.stdout.write(out) 
     sys.stdout.flush() 
+0

Спасибо Халилу. из приведенного выше кода. Я могу найти ip-адрес, но как я могу построить это значение в качестве ввода для команды ping 8.8.8.8 -I get_ip_address ('eth0') – user1056087

+0

@ user1056087 Я отредактировал свой ответ, проверьте его –

Смежные вопросы