为什么当我写入stderr时,我在stdout上看到STDERR输出?

时间:2015-11-06 10:36:35

标签: python stdout stderr

{ userData: 
   { email: 'thusitha@gmail.com',
     userName: 'thusithz',
     userRole: 'Standard',
     selectedAccountList: 
      [ { accountName: 'HSBC name',
          CFIXID: 'HSBC_CFIXID',
          id: '563c4d7e802127d51b3d80c7',
          StatusCode: 'Pending' },
        { accountName: 'NSB plus',
          CFIXID: 'NSB_CFIXID',
          id: '563c4de1802127d51b3d80c8',
          StatusCode: 'Pending' } ],
     createdAt: '2015-11-06T05:10:18.690Z',
     updatedAt: '2015-11-06T05:52:24.820Z',
     verifyCode: '1446786618698FfL2_gHGexhOb_JQ',
     pincode: '1111',
     id: '563c363aa45b2d841afc63ab' },
  accountData: 
   [ { TimeStamp: '1446797352',
       TransactionID: 'LGPS201511613253518097',
       SecretTransactionKey: 'HSBC_CFIXID03636867',
       ReplyID: '35753',
       StatusCode: 'Successful',
       StatusDescription: 'Authentication Failed',
       Tags: '',
       ReturnURL: '',
       userID: '563c363aa45b2d841afc63ab',
       accountName: 'HSBC plus',
       CFIXID: 'HSBC_CFIXID',
       VerificationCode: 'LGPS3309914431991402',
       createdAt: '2015-11-06T07:55:35.229Z',
       updatedAt: '2015-11-06T07:55:35.229Z',
       id: '563c5cf7463ef3eb0aeaf57a' } ] }

你能解释为什么当我写到stderr时,我在stdout上看到了STDERR输出吗?我认为终端只能看到STDOUT。

import sys

if __name__ == '__main__':
    sys.stdout.write("STDOUT\n")
    sys.stderr.write("STDERR\n")

3 个答案:

答案 0 :(得分:3)

  

我认为只有STDOUT应该在终端中可见。

不正确的。 stderr是一个单独的文件描述符,但默认情况下它仍然与stdout连接到同一个tty。

答案 1 :(得分:1)

默认情况下,stdout和stderr流都与您的显示设备连接,这也是您在屏幕上看到syserr消息的原因。

答案 2 :(得分:1)

通常,stdoutstderr会显示在终端中。如果您的操作系统支持它,您可以将一个或两个重定向到其他地方。例如,您可以重定向stdout,但只能在终端中看到stderr(或者您可以重定向stderr,并且您只能在终端中看到stdout