Stdout для dev / null не работает с модулем подпроцесса в python3.6 - PullRequest
0 голосов
/ 07 мая 2019

Использование Python 3.6.7 на Ubuntu 18.04.2 LTS

Я пытаюсь вызвать сценарий оболочки через сценарий python и ожидаю, что стандартный вывод будет нулевым, т. Е. Я не хочу вывод консоли.

Фрагмент программы

def command_execution(self, cmd, cwd=None):
    """ Execute the command cmd without console output
    and return the exitcode
    """
    FNULL = open(os.devnull, 'w') # Method1
    self.log.debug("Executing command " +  cmd)
    exec_cmd = subprocess.Popen(cmd, cwd=cwd, shell=True,  stdout=subprocess.DEVNULL)
    # Method1 call exec_cmd = subprocess.Popen(cmd, cwd=cwd, shell=True,  stdout=FNULL)

    (_,_) = exec_cmd.communicate()
    exitcode = exec_cmd.returncode
    self.log.debug("Executed command {0} with exitcode {1}".format(cmd, exitcode))
    return exitcode

Как уже упоминалось выше, я пробовал оба метода FNULL и subprocess.DEVNULL. Но я все еще вижу вывод на консоли.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 07 мая 2019

Возможно ли, что ваш cmd выводит на stderr, а не на stdout?

Вы можете проверить, выполнив что-то вроде этого:

exec_cmd = subprocess.Popen(cmd, cwd=cwd, shell=True,  stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
...