簡體   English   中英

為什么通過子進程從“ git --version”讀取的內容與“ python --version”顯示在不同的頻道上?

[英]Why does reading from “git --version” show up on a different channel from “python --version” via subprocess?

有人可以解釋一下為什么以下命令(“ python --version”)的輸出將變為標准錯誤而不是標准輸出嗎?

import shlex, subprocess

cmd = subprocess.Popen(shlex.split("git --version"), stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)

std_out, std_err = cmd.communicate()

print("std_out: {}".format(std_out))
print("std_err: {}".format(std_err))

cmd = subprocess.Popen(shlex.split("python --version"), stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False)

std_out, std_err = cmd.communicate()

print("std_out: {}".format(std_out))
print("std_err: {}".format(std_err))

這是打印出來的內容:

std_out: git version 2.19.2

std_err: 
std_out: 
std_err: Python 2.7.15

我是python的新手,不知道為什么在上述情況下它的行為有所不同。 謝謝。

您的代碼沒有錯。 結果不同是因為這兩個程序對(至少)這些命令使用了不同的輸出通道。 特別是,看起來git正在使用stdout ,而python正在使用stderr

為了交叉檢查一個程序使用哪個頻道,您可以使用此答案中指示的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM