73

os.system()別の科学プログラムを実行するために使用されるPython スクリプトを含む科学ソフトウェアを使用しています。サブプロセスの実行中、Python はある時点で次のように出力します。

close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

このメッセージは返品と同時に印刷されると思いos.system()ます。

私の質問は次のとおりです。

このタイプの IOError につながる可能性のある条件はどれですか? 正確にはどういう意味ですか?によって呼び出されたサブプロセスにとって、それはどういう意味os.system()ですか?

4

2 に答える 2

62

close()Pythonファイルが「外部」から、つまりファイルオブジェクトのメソッドからではなく閉じられた場合、このエラーメッセージが表示されます。

>>> f = open(".bashrc")
>>> os.close(f.fileno())
>>> del f
close failed in file object destructor:
IOError: [Errno 9] Bad file descriptor

この行del fは、ファイルオブジェクトへの最後の参照を削除し、そのデストラクタfile.__del__が呼び出されるようにします。ファイルオブジェクトの内部状態は、f.close()呼び出されたことがないためファイルがまだ開いていることを示しているため、デストラクタはファイルを閉じようとします。その後、開いていないファイルを閉じようとしたため、OSはエラーをスローします。

の実装でos.system()はPythonファイルオブジェクトが作成されないため、system()呼び出しがエラーの原因である可能性は低いようです。たぶん、もう少しコードを表示できますか?

于 2011-10-07T11:13:40.287 に答える
19

ファイルを開くときに間違ったモードを使用すると、このエラーが発生する可能性があります。例えば:

    with open(output, 'wb') as output_file:
        print output_file.read()

そのコードでは、ファイルを読み取りたいのですが、またはwbの代わりにモードを使用しますrr+

于 2015-11-30T18:38:45.547 に答える