1. ホーム
  2. python

[解決済み] なぜ Popen.communicate() は 'hi' ではなく b'hièsn' を返すのですか?

2022-10-17 14:56:40

質問

私が欲しい結果、"hi" の前に文字 'b' があり、その後に改行があるのはなぜか、誰か説明してください。

私は Python 3.3

>>> import subprocess
>>> print(subprocess.Popen("echo hi", shell=True,
                           stdout=subprocess.PIPE).communicate()[0])
b'hi\n'

python 2.7で実行すると、この余分な'b'は表示されません。

どのように解決するのですか?

echoコマンドは、デフォルトで改行文字を返します。

これと比較すると

print(subprocess.Popen("echo -n hi", \
    shell=True, stdout=subprocess.PIPE).communicate()[0])

については b の前にあるのはバイト列であることを示しており、Python 2.6+では通常の文字列と同等になります。

http://docs.python.org/3/reference/lexical_analysis.html#literals