5

のpython docs on からurllib.urlopen()、関数が成功時に返すファイルのようなオブジェクトについて話します:

(ただし、これは組み込みファイル オブジェクトではないため、真の組み込みファイル オブジェクトが必要ないくつかの場所では使用できません。)

真のビルトイン ファイル オブジェクトが必要ないくつかの場所はどこですか?

注意: これは純粋に好奇心からです... ここで解決すべき実際的な問題はありません。

4

3 に答える 3

3

他の回答が指摘しているように、オブジェクトを特に必要とする場所は実際にはありませんが、ファイルのようなオブジェクトが提供できない実際のfileOS レベルのファイル記述子を必要とするインターフェイスがあります。StringIO

モジュールには、およびモジュールとos同様に、ファイル記述子を直接操作するいくつかのメソッドがあります。一部の上位レベルのモジュールは内部のモジュールに依存しているため、メソッドをサポートしていないファイルのようなオブジェクトを操作する場合、いくつかの制限が生じる場合があります。selectmmapfileno()

ただし、これらの制限に関する一貫したドキュメントは知りません (オブジェクトではなく数値のファイル記述子を受け入れる明白な API を除いて)。それは、「実際に試してみて、それが機能するかどうかを確認する」ことです。うまくいかない場合は、これを頭の片隅に置いておいて、考えられる原因を確認してください (特に、関連するエラー メッセージに「"no attribute named 'fileno'"または」のようなフレーズが表示されている場合)。"invalid file descriptor"

于 2011-05-16T11:56:13.690 に答える
2

モジュール内のものには、 、およびの呼び出し可能な属性をsubprocess持つファイル オブジェクトが必要です。これは、ファイル記述子を持つファイル (実際のファイル) のみが を実装する必要があります。また、実際のファイルにのみ実装する必要がありますが、どこで必要なのかわかりません。filenostdinstdoutstderrisatty()

于 2011-05-16T00:17:08.523 に答える
0

たとえば、 f.fileno() は、必ずしも os.read() で使用できる真の OS レベルのファイル記述子を返すとは限りません。

于 2011-05-16T00:13:33.657 に答える