Python子进程在stderr中显示输出

时间:2018-04-21 14:16:55

标签: python ubuntu terminal python-3.5

我在 X 分钟后创建了以下脚本来关闭Ubuntu机器。

import subprocess

def execute_command(command):
    command = command.split()
    try:
        print(command)
        command_process = subprocess.run(command,
                                         stdout=subprocess.PIPE,
                                         stderr=subprocess.PIPE)
        output = command_process.stdout.decode('utf-8')            
        output_message = "Command output: {}".format(output)
        error = command_process.stderr.decode('utf-8')            
        error_message = "Command error: {}".format(error)
        print(output_message)
        print(error_message)
    except Exception as error:
        command_error = str(error)
        print("Error: "+command_error)

command = "shutdown -h 50"
execute_command(command)

输出:

['shutdown', '-h', '50']
Command output: 
Command error: Shutdown scheduled for Sat 2018-04-21 19:37:25 +06, use 'shutdown -c' to cancel.

我的问题:

  1. 为什么stdout为空?
  2. 为什么邮件会显示在stderr中?我的脚本中有错误吗?

1 个答案:

答案 0 :(得分:1)

你的代码似乎是正确的; shutdown命令似乎将其输出发送到stderr:

$ shutdown +9 >/dev/null
Shutdown scheduled for Sat 2018-04-21 15:38:00 BST, use 'shutdown -c' to cancel.

shutdown +9 2>/dev/null不产生输出。

说明:

  • >stdout重定向到文件
  • 2>stderr重定向到文件
  • /dev/null是一个丢弃写入所有内容的特殊文件

参考:TLDP