オペレーティングシステムユーティリティ
- PyObject *PyOS_FSPath(PyObject *path)
path のファイルシステム表現を返します。 オブジェクトが str または bytes オブジェクトの場合、その参照カウントがインクリメントされます。 オブジェクトが os.PathLike インターフェイスを実装している場合、 str または bytes オブジェクトである限り、
__fspath__()
が返されます。 それ以外の場合は、 TypeError が発生し、NULL
が返されます。バージョン3.6の新機能。
- int Py_FdIsInteractive(FILE *fp, const char *filename)
- 名前 filename の標準I / Oファイル fp がインタラクティブであると見なされる場合は、true(ゼロ以外)を返します。 これは、
isatty(fileno(fp))
が真であるファイルの場合です。 グローバルフラグPy_InteractiveFlag
がtrueの場合、 filename ポインタがNULL
の場合、または名前が文字列 [のいずれかと等しい場合にも、この関数はtrueを返します。 X166X]または'???'
。
- void PyOS_BeforeFork()
プロセスフォークの前に内部状態を準備する関数。 これは、
fork()
または現在のプロセスのクローンを作成する同様の関数を呼び出す前に呼び出す必要があります。fork()
が定義されているシステムでのみ使用できます。バージョン3.7の新機能。
- void PyOS_AfterFork_Parent()
プロセスフォーク後に内部状態を更新する関数。 これは、プロセスの複製が成功したかどうかに関係なく、
fork()
または現在のプロセスを複製する同様の関数を呼び出した後、親プロセスから呼び出す必要があります。fork()
が定義されているシステムでのみ使用できます。バージョン3.7の新機能。
- void PyOS_AfterFork_Child()
プロセスフォーク後に内部インタープリターの状態を更新する関数。 これは、
fork()
、または現在のプロセスを複製する同様の関数を呼び出した後、プロセスがPythonインタープリターにコールバックする可能性がある場合は、子プロセスから呼び出す必要があります。fork()
が定義されているシステムでのみ使用できます。バージョン3.7の新機能。
も参照してください
os.register_at_fork()を使用すると、カスタムPython関数を登録して PyOS_BeforeFork()、 PyOS_AfterFork_Parent()、 PyOS_AfterFork_Child()で呼び出すことができます。
- void PyOS_AfterFork()
プロセスフォーク後に内部状態を更新する関数。 Pythonインタープリターを引き続き使用する場合は、新しいプロセスでこれを呼び出す必要があります。 新しい実行可能ファイルが新しいプロセスにロードされる場合、この関数を呼び出す必要はありません。
バージョン3.7以降非推奨:この関数は PyOS_AfterFork_Child()に置き換えられました。
- int PyOS_CheckStack()
- インタプリタがスタックスペースを使い果たした場合はtrueを返します。 これは信頼できるチェックですが、
USE_STACKCHECK
が定義されている場合にのみ使用できます(現在、WindowsではMicrosoft Visual C ++コンパイラを使用しています)。USE_STACKCHECK
は自動的に定義されます。 独自のコードで定義を変更しないでください。
- PyOS_sighandler_t PyOS_getsig(int i)
- シグナル i の現在のシグナルハンドラーを返します。 これは、
sigaction()
またはsignal()
のいずれかの薄いラッパーです。 これらの関数を直接呼び出さないでください。PyOS_sighandler_t
は、void (*)(int)
のtypedefエイリアスです。
- PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)
- シグナル i のシグナルハンドラーを h に設定します。 古いシグナルハンドラを返します。 これは、
sigaction()
またはsignal()
のいずれかの薄いラッパーです。 これらの関数を直接呼び出さないでください。PyOS_sighandler_t
は、void (*)(int)
のtypedefエイリアスです。
- wchar_t *Py_DecodeLocale(const char *arg, size_t *size)
surrogateescapeエラーハンドラを使用して、ロケールエンコーディングからバイト文字列をデコードします。デコードできないバイトは、U + DC80..U + DCFFの範囲の文字としてデコードされます。 バイトシーケンスを代理文字としてデコードできる場合は、デコードする代わりに、surrogateescapeエラーハンドラーを使用してバイトをエスケープします。
エンコーディング、最高の優先順位から最低の優先順位:
macOSおよびAndroidでは
UTF-8
。UTF-8
PythonUTF-8モードが有効になっている場合。ASCII
LC_CTYPE
ロケールが"C"
の場合、nl_langinfo(CODESET)
はASCII
エンコーディング(またはエイリアス)を返し、 [X112X ]およびwcstombs()
関数は、ISO-8859-1
エンコーディングを使用します。現在のロケールエンコーディング。
新しく割り当てられたワイド文字列へのポインタを返します。 PyMem_RawFree()を使用してメモリを解放します。 サイズが
NULL
でない場合は、ヌル文字を除くワイド文字の数を*size
に書き込みます。デコードエラーまたはメモリ割り当てエラーの場合は、
NULL
を返します。 size がNULL
でない場合、*size
はメモリエラー時に(size_t)-1
に設定され、デコードエラー時に(size_t)-2
に設定されます。Cライブラリにバグがない限り、デコードエラーが発生することはありません。
Py_EncodeLocale()関数を使用して、文字列をエンコードしてバイト文字列に戻します。
も参照してください
PyUnicode_DecodeFSDefaultAndSize()および PyUnicode_DecodeLocaleAndSize()関数。
バージョン3.5の新機能。
バージョン3.7で変更:この関数はUTF-8モードでUTF-8エンコーディングを使用するようになりました。
- char *Py_EncodeLocale(const wchar_t *text, size_t *error_pos)
surrogateescapeエラーハンドラを使用して、ワイド文字列をロケールエンコーディングにエンコードします。U+ DC80..U + DCFFの範囲のサロゲート文字はバイト0x80..0xFFに変換されます。
エンコーディング、最高の優先順位から最低の優先順位:
macOSおよびAndroidでは
UTF-8
。UTF-8
PythonUTF-8モードが有効になっている場合。ASCII
LC_CTYPE
ロケールが"C"
の場合、nl_langinfo(CODESET)
はASCII
エンコーディング(またはエイリアス)を返し、 [X112X ]およびwcstombs()
関数は、ISO-8859-1
エンコーディングを使用します。現在のロケールエンコーディング。
この関数は、PythonUTF-8モードでUTF-8エンコーディングを使用します。
新しく割り当てられたバイト文字列へのポインタを返します。 PyMem_Free()を使用してメモリを解放します。 エンコーディングエラーまたはメモリ割り当てエラーで
NULL
を返しますerror_posが
NULL
でない場合、成功すると*error_pos
が(size_t)-1
に設定されるか、エンコードエラー時に無効な文字のインデックスに設定されます。Py_DecodeLocale()関数を使用して、バイト文字列をワイド文字列にデコードして戻します。
バージョン3.7で変更:この関数はUTF-8モードでUTF-8エンコーディングを使用するようになりました。
も参照してください
バージョン3.5の新機能。
バージョン3.7で変更:この関数はUTF-8モードをサポートするようになりました。
システム機能
これらは、 sys モジュールの機能をCコードにアクセスできるようにするユーティリティ関数です。 これらはすべて、内部スレッド状態構造に含まれている現在のインタープリタースレッドの sys モジュールのdictで機能します。
- PyObject *PySys_GetObject(const char *name)
- sys モジュールからオブジェクト name を返します。存在しない場合は、例外を設定せずに
NULL
を返します。
- int PySys_SetObject(const char *name, PyObject *v)
- v が
NULL
でない限り、 sys モジュールの name を v に設定します。 X113X]がsysモジュールから削除されます。 成功した場合は0
を返し、エラーの場合は-1
を返します。
- void PySys_ResetWarnOptions()
- sys.warnoptions を空のリストにリセットします。 この関数は、 Py_Initialize()の前に呼び出すことができます。
- void PySys_AddWarnOption(const wchar_t *s)
- s を sys.warnoptions に追加します。 警告フィルターリストに影響を与えるには、 Py_Initialize()の前にこの関数を呼び出す必要があります。
- void PySys_AddWarnOptionUnicode(PyObject *unicode)
unicode を sys.warnoptions に追加します。
注:この関数は、 Py_Initialize()で警告を暗黙的にインポートする前に呼び出す必要があるため、現在CPython実装の外部からは使用できませんが、使用できません。 Unicodeオブジェクトの作成を許可するのに十分なランタイムが初期化されるまで呼び出されます。
- void PySys_SetPath(const wchar_t *path)
- sys.path を、 path で見つかったパスのリストオブジェクトに設定します。これは、プラットフォームの検索パス区切り文字(Unixでは
:
、[ X175X] (Windowsの場合)。
- void PySys_WriteStdout(const char *format, ...)
format で記述された出力文字列を sys.stdout に書き込みます。 切り捨てが発生した場合でも、例外は発生しません(以下を参照)。
format は、フォーマットされた出力文字列の合計サイズを1000バイト以下に制限する必要があります。1000バイトを超えると、出力文字列は切り捨てられます。 特に、これは無制限の「%s」形式が発生してはならないことを意味します。 これらは「%」を使用して制限する必要があります。 s」ここでは、次のように計算された10進数です。 さらに、他のフォーマットされたテキストの最大サイズは1000バイトを超えません。 また、非常に大きな数に対して数百桁を印刷できる「%f」にも注意してください。
問題が発生した場合、または sys.stdout が設定されていない場合、フォーマットされたメッセージは実際の(Cレベル) stdout に書き込まれます。
- void PySys_WriteStderr(const char *format, ...)
- PySys_WriteStdout()と同じですが、代わりに sys.stderr または stderr に書き込んでください。
- void PySys_FormatStdout(const char *format, ...)
PySys_WriteStdout()と同様の関数ですが、 PyUnicode_FromFormatV()を使用してメッセージをフォーマットし、メッセージを任意の長さに切り捨てないでください。
バージョン3.2の新機能。
- void PySys_FormatStderr(const char *format, ...)
PySys_FormatStdout()と同じですが、代わりに sys.stderr または stderr に書き込んでください。
バージョン3.2の新機能。
- void PySys_AddXOption(const wchar_t *s)
s を -X オプションのセットとして解析し、 PySys_GetXOptions()によって返される現在のオプションマッピングに追加します。 この関数は、 Py_Initialize()の前に呼び出すことができます。
バージョン3.2の新機能。
- PyObject *PySys_GetXOptions()
sys._xoptions と同様に、 -X オプションの現在の辞書を返します。 エラーの場合、
NULL
が返され、例外が設定されます。バージョン3.2の新機能。
プロセス制御
- void Py_FatalError(const char *message)
- 致命的なエラーメッセージを出力し、プロセスを強制終了します。 クリーンアップは実行されません。 この関数は、Pythonインタープリターの使用を継続するのが危険になる条件が検出された場合にのみ呼び出す必要があります。 たとえば、オブジェクト管理が破損しているように見える場合。 Unixでは、標準Cライブラリ関数
abort()
が呼び出され、core
ファイルの生成が試みられます。
- void Py_Exit(int status)
現在のプロセスを終了します。 これにより、 Py_FinalizeEx()が呼び出され、次に標準Cライブラリ関数
exit(status)
が呼び出されます。 Py_FinalizeEx()がエラーを示している場合、終了ステータスは120に設定されます。バージョン3.6で変更:ファイナライズからのエラーは無視されなくなりました。
- int Py_AtExit(void (*func)())
- Py_FinalizeEx()によって呼び出されるクリーンアップ関数を登録します。 クリーンアップ関数は引数なしで呼び出され、値を返さないはずです。 最大32個のクリーンアップ機能を登録できます。 登録が成功すると、 Py_AtExit()は
0
を返します。 失敗すると、-1
を返します。 最後に登録されたクリーンアップ関数が最初に呼び出されます。 各クリーンアップ関数は、最大で1回呼び出されます。 Pythonの内部ファイナライズはクリーンアップ関数の前に完了するため、 func によってPythonAPIを呼び出さないでください。