2015-09-06 82 views
0

首先,原諒我的錯誤,我不是英語日期。 我正在python3代碼。 我想停止subprocess.Popen的輸出。沉默輸出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:在恢復接口信息錯誤:未找到設備 ETH2:在恢復接口信息錯誤:未找到設備 eth1的錯誤:在回收所述接口信息:未找到設備 的eth2:錯誤恢復中的界面信息:未找到設備

這意味着: 「接口未找到」(我只有積極eth0和爲wlan0)

我試着使用標準輸出=開放(os.devnull, '世行'),但它打印:

ETH1:在恢復所述接口信息錯誤:未找到設備 的eth2:在恢復所述接口信息錯誤:未找到設備 WLAN1:錯誤恢復中的界面信息:未找到設備 wifi0:錯誤檢索接口信息:未找到設備 ATH0:錯誤恢復中的界面信息:未找到設備 ATH1:錯誤恢復的接口信息:設備沒有找到 ppp0的:錯誤恢復的接口信息:設備沒有找到 的eth1:錯誤恢復的接口信息:設備沒有找到 ETH2 :在恢復所述接口信息錯誤:未找到設備 WLAN1:錯誤恢復中的界面信息:未找到設備 wifi0:錯誤恢復中的界面信息:未找到設備 ATH0:錯誤恢復接口信息:未找到設備 ATH1:錯誤恢復中的界面信息:未找到設備 ppp0的:錯誤獲取接口信息:設備沒有找到

和程序doesen't工作。

回答

0

錯誤消息將可能打印在stderr。要消除它,使用stderr=subprocess.DEVNULL

0

我所遇到的場合,當管標準輸出/標準錯誤沒有工作,在情況下,你需要使用可以嘗試破解,例如讓殼處理輸出(例如用於Linux只,Windows可能同樣工作):

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

這是不必要的,錯誤的。 (1)考慮如何列出論據殼= +'對POSIX系統TRUE'工作。用字符串參數進行比較(指定外殼命令)殼= + TRUE;(2)'殼= TRUE'是不必要的。 '標準錯誤= subprocess.DEVNULL'始終工作where' 2>的/ dev/null'可能工作。 – jfs