0Pricing
Python Academy · レッスン

出力の取得

stdoutとstderrを読み取ります

「出力の取得」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

標準出力のキャプチャ

コマンドが出力した内容を読み取るには、capture_output=Trueを渡します。テキストは結果のstdout属性に入ります。

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)

バイト列とテキスト

デフォルトでは、出力はバイト列です。代わりにデコード済みの文字列を取得するにはtext=Trueを渡します。通常はこちらが必要になります。

import subprocess

cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))

末尾の改行の除去

コマンドの出力は、末尾に改行が付いていることがよくあります。値を使用する前に.strip()で取り除いてください。

import subprocess

cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')

標準エラー出力のキャプチャ

エラーは通常stderrに出力され、個別にキャプチャされます。これにより、通常の出力とエラーメッセージを区別できます。

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())

コードでの出力の利用

キャプチャした出力は単なる文字列なので、解析できます。行に分割したり、数値に変換したり、プログラムの残りの処理に渡したりできます。

import subprocess

cp = subprocess.run(['printf', 'a\nb\nc\n'], capture_output=True, text=True)
lines = cp.stdout.splitlines()
print('line count:', len(lines))
print(lines)

stderrをstdoutにリダイレクトする

エラー出力を通常のストリームに統合するには、stderr=subprocess.STDOUTを設定します。すると両方の出力がstdoutに入ります。

import subprocess

cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
                    stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())

入力の提供

input引数を使うと、コマンドの標準入力にデータを渡せます。ここではテキストをcatにパイプします。

import subprocess

cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())

check_outputのショートカット

subprocess.check_output()はコマンドを実行し、標準出力を直接返します。失敗時には例外を発生させます。出力をキャプチャする便利な1行処理です。

import subprocess

out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())

出力の破棄

コマンドの出力を抑制するには、ストリームをsubprocess.DEVNULLにリダイレクトします。

import subprocess

cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)

出力を伴うエラー処理

check=Trueを使用している場合、発生したCalledProcessErrorには、診断に必要なキャプチャ済みのoutputとstderrも含まれます。

import subprocess

try:
    subprocess.run(['ls', '/missing'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
    print('failed:', e.returncode)
    print('stderr:', e.stderr.strip())

まとめて実装する

一般的なヘルパーは、コマンドを実行して成功を確認し、整形済みのテキストを返します。これはよく使われるパターンをまとめたものです。

import subprocess

def capture(cmd):
    cp = subprocess.run(cmd, capture_output=True, text=True, check=True)
    return cp.stdout.strip()

print(capture(['echo', 'final result']))

確認問題

出力キャプチャの理解度を確認しましょう。

復習

出力をキャプチャする方法を学びました。

  • capture_output=Trueとtext=Trueを指定すると、文字列のstdoutとstderrを取得できます。
  • stderr=subprocess.STDOUTでストリームを統合し、DEVNULLで出力を抑制します。
  • input=で入力を渡せます。check_outputはそのショートカットです。
  • エラーにはデバッグ用のキャプチャ済み出力が含まれます。

次は、環境変数とosモジュールについて学びます。

よくある質問

「出力の取得」レッスンは無料ですか?

はい。「出力の取得」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「出力の取得」で何を学びますか?

stdoutとstderrを読み取ります ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「出力の取得」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. subprocessによるコマンド実行
  2. 出力の取得
  3. 環境とosモジュール
  4. ファイル操作のためのshutil
← Python Academyに戻る