首先,原諒我的錯誤,我不是英語日期。 我正在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工作。
這是不必要的,錯誤的。 (1)考慮如何列出論據殼= +'對POSIX系統TRUE'工作。用字符串參數進行比較(指定外殼命令)殼= + TRUE;(2)'殼= TRUE'是不必要的。 '標準錯誤= subprocess.DEVNULL'始終工作where' 2>的/ dev/null'可能工作。 – jfs