到dev / null的stdout无法在python3.6中与子进程模块一起使用

时间:2019-05-07 16:42:37

标签: python python-3.x subprocess python-3.6

Python 3.6.7上使用Ubuntu 18.04.2 LTS

我试图通过python脚本调用Shell脚本,并期望stdout为null,即我不希望控制台输出。

程序摘要

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

如上所述,我尝试了FNULLsubprocess.DEVNULL方法。但是,我仍然在控制台上看到输出。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您的cmd是否有可能输出到stderr,而不是stdout?

您可以通过执行以下操作进行测试:

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