6.1.2 ファイルオブジェクトの生成

以下の関数は新しいファイルオブジェクトを作成します。

fdopen( fd[, mode[, bufsize]])
ファイル記述子 fd に接続している、開かれた ファイルオブジェクトを返します。 引数 mode および bufsize は、組み込み関数 open() における対応する引数と同じ意味を持ちます。 利用できる環境: Macintosh、 Unix、Windows

popen( command[, mode[, bufsize]])
command への、または command からのパイプ入出力を開きます。 戻り値はパイプに接続されている開かれたファイルオブジェクトで、 mode'r' (標準の設定です) または 'w' かに よって読み出しまたは書き込みを行うことができます。 引数 bufsize は、組み込み関数 open() における対応する引数と同じ意味を持ちます。 command の終了ステータス (wait() で指定された書式でコード化 されています) は、close() メソッドの戻り値として取得することが できます。例外は終了ステータスがゼロ (すなわちエラーなしで終了) の 場合で、このときには None を返します。 利用できる環境: Unix、Windows

バージョン 2.0 で 変更 された仕様: この関数は、Pythonの初期のバージョンでは、 Windows環境下で信頼できない動作をしていました。これはWindowsに付属 して提供されるライブラリの _popen() 関数を利用したことに よるものです。新しいバージョンの Python では、Windows 付属のライブラリ にある壊れた実装を利用しません

tmpfile( )
更新モード("w+b")で開かれた新しいファイルオブジェクトを返します。 このファイルはディレクトリエントリ登録に関連付けられておらず、 このファイルに対するファイル記述子がなくなると自動的に削除されます。 利用できる環境: Unix、Windows

以下の popen() の変種はどれも、bufsize が指定されている場合には I/O パイプのバッファサイズを表します。 mode を指定する場合には、文字列 'b' または 't' でなければなりません; これは、Windows でファイルをバイナリモードで開くか テキストモードで開くかを決めるために必要です。 mode の標準の 設定値は't' です。

またUnixではこれらの変種はいずれも cmd をシーケンスにできます。その場合、 引数はシェルの介在なしに直接 (os.spawnv() のように) 渡されます。 cmd が文字列の場合、引数は( os.system() のように) シェルに渡されます。

以下のメソッドは子プロセスからリターンコードを取得できるようには していません。入出力ストリームを制御し、かつ終了コードの取得も 行える唯一の方法は、 popen2 モジュールの Popen3Popen4 クラスを利用する事です。これらは Unix上でのみ利用可能です。

これらの関数の利用に関係して起きうるデッドロック状態についての議論は、 ``フロー制御問題'' (section 6.9.2) を参照してください。

popen2( cmd[, mode[, bufsize]])
cmd を子プロセスとして実行します。ファイル・オブジェクト (child_stdin, child_stdout) を返します。 利用できる環境: Unix、Windows バージョン 2.0 で 新たに追加 された仕様です。

popen3( cmd[, mode[, bufsize]])
cmd を子プロセスとして実行します。ファイルオブジェクト (child_stdin, child_stdout, child_stderr) を 返します。 利用できる環境: Unix、Windows バージョン 2.0 で 新たに追加 された仕様です。

popen4( cmd[, mode[, bufsize]])
cmd を子プロセスとして実行します。ファイルオブジェクト (child_stdin, child_stdout_and_stderr) を返します。 利用できる環境: Unix、Windows バージョン 2.0 で 新たに追加 された仕様です。

(child_stdin, child_stdout, および child_stderr は子プロセスの視点で名付けられているので注意してください。 すなわち、child_stdin とは子プロセスの標準入力を意味します。)

この機能は popen2 モジュール内の同じ名前の関数 を使っても実現できますが、これらの関数の戻り値は異なる順序を持ってい ます。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。