沉默输出subprocess.popen

时间:2015-09-06 22:16:00

标签: python python-3.x subprocess

首先,请原谅我的错误,我不是英国人。 我正在研究Python3代码。 我想停止subprocess.popen的输出。

def get_interface_ip(interface):
    devnull = open(os.devnull, 'wb')
    output = subprocess.Popen(['ifconfig', interface], stdout=subprocess.PIPE).communicate()[0]
    ip_lan_value = re.findall('192.168.([0-9]*).[0-9]* ', str(output))[0]
    return (ip_lan_value)

def get_lan_ip():
iplan = socket.gethostbyname(socket.gethostname())
if iplan.startswith("127."):
    interfaces = [
        "eth0",
        "eth1",
        "eth2",
        "wlan0",
        "wlan1",
        "wifi0",
        "ath0",
        "ath1",
        "ppp0",
        ]
    for interface in interfaces:
        try:
            iplan = get_interface_ip(interface)
            break
        except IOError:
            pass
        except IndexError:
            pass
return iplan

但它打印出来:

  

eth1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth2:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth2:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato

这意味着:"未找到界面" (我只活动eth0和wlan0)

我尝试过使用stdout = open(os.devnull,' wb')但是打印出来了:

  

eth1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth2:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   wlan1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   wifi0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ath0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ath1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ppp0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   eth2:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   wlan1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   wifi0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ath0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ath1:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato   ppp0:errore nel recuperare le informazioni dell' interfaccia:Dispositivo non trovato

并且该程序无法正常工作。

2 个答案:

答案 0 :(得分:0)

错误消息可能打印在stderr上。要使其静音,请使用stderr=subprocess.DEVNULL

答案 1 :(得分:0)

我遇到过管道stdout / stderr不起作用的情况,在这种情况下你可以尝试使用hack,例如让shell处理输出(仅适用于Linux的示例,Windows可能类似):

subprocess.Popen(['ifconfig', interface, '2>/dev/null'], stdout=subprocess.PIPE, shell=True)