Q:

Python subprocess.call запретить вывод в терминал результата

Приветствую всех, есть функция на Python 2.x, которая пингует хост через определенный сетевой интерфейс через вызов fping в Linux. Сама функция работает, только кидает в терминал строку c результатом выполнения:
8.8.8.8 : xmt/rcv/%loss = 5/5/0%, min/avg/max = 50.5/50.5/50.5

Возможно ли как-то запретить вывод этой строки в терминале?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#-------------------------------------------
import os            
import subprocess

def Host_Ping( iface, host ):
    response = subprocess.call(["fping", "-c 5", "-p 2", "-t200", host, "-I", iface], stdout=open(os.devnull, 'w'))
    if response == 0:
        result = True           # ping ok 
    else:
        result = False          # ping error
    return result

print Host_Ping ('eth1', "8.8.8.8")

A:

Чтобы убрать вывод команды:

Используйте опции самой команды. К примеру, -q (не поможет для fping).
Если команда пишет в stdout, stderr перенаправьте в /dev/null:
#!/usr/bin/env python2
import os
import subprocess

DEVNULL = os.open(os.devnull, os.O_WRONLY)        
rc = subprocess.call(["echo", "dropped"], stdout=DEVNULL, stderr=subprocess.STDOUT)

subprocess.DEVNULL встроен на Python 3.
Если команда пишет напрямую в терминал, то можно script(1) утилиту использовать, чтобы перехватить вывод:
cmd = r"""python -c 'import os; os.write(os.open(os.ctermid(), os.O_WRONLY), b"abc\n")'"""
rc = subprocess.call(['script', '-e', '-q', '-c', cmd, os.devnull],
                     stdout=DEVNULL)

