web-dev-qa-db-ja.com

os.system()中に「IOError:[Errno 9] Bad file descriptor」につながる原因は何ですか?

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

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

このメッセージは、os.system()が戻ると同時に出力されると信じています。

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

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

49

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

>>> 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()呼び出しがエラーの原因である可能性は低いようです。もう少しコード?

43
Sven Marnach

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

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

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

14
Aminah Nuraini