Files
godot-docs-l10n/classes/zh_Hans/class_os.rst
Rémi Verschelde c3f2364c10 Sync classref with 4.6 branch
Lots of translations invalidated (fuzzied) as we just synced Weblate.
2025-12-19 16:39:51 +01:00

1972 lines
141 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

:github_url: hide
.. _class_OS:
OS
==
**继承:** :ref:`Object<class_Object>`
提供对常见操作系统功能的访问。
.. rst-class:: classref-introduction-group
描述
----
**OS** 类封装了与主机操作系统通信的最常见功能,例如视频驱动、延时、环境变量、二进制文件的执行、命令行等。
\ **注意:**\ 在 Godot 4 中,与窗口管理、剪贴板和 TTS 相关的 **OS** 函数已被移至 :ref:`DisplayServer<class_DisplayServer>` 单例(和 :ref:`Window<class_Window>` 类)。与时间相关的函数已被移除,并且仅在 :ref:`Time<class_Time>` 类中可用。
.. rst-class:: classref-introduction-group
教程
----
- `操作系统测试演示 <https://godotengine.org/asset-library/asset/2789>`__
.. rst-class:: classref-reftable-group
属性
----
.. table::
:widths: auto
+-------------------------+---------------------------------------------------------------------------------------------------+-----------+
| :ref:`bool<class_bool>` | :ref:`delta_smoothing<class_OS_property_delta_smoothing>` | ``true`` |
+-------------------------+---------------------------------------------------------------------------------------------------+-----------+
| :ref:`bool<class_bool>` | :ref:`low_processor_usage_mode<class_OS_property_low_processor_usage_mode>` | ``false`` |
+-------------------------+---------------------------------------------------------------------------------------------------+-----------+
| :ref:`int<class_int>` | :ref:`low_processor_usage_mode_sleep_usec<class_OS_property_low_processor_usage_mode_sleep_usec>` | ``6900`` |
+-------------------------+---------------------------------------------------------------------------------------------------+-----------+
.. rst-class:: classref-reftable-group
方法
----
.. table::
:widths: auto
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`add_logger<class_OS_method_add_logger>`\ (\ logger\: :ref:`Logger<class_Logger>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`alert<class_OS_method_alert>`\ (\ text\: :ref:`String<class_String>`, title\: :ref:`String<class_String>` = "Alert!"\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`close_midi_inputs<class_OS_method_close_midi_inputs>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`crash<class_OS_method_crash>`\ (\ message\: :ref:`String<class_String>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`create_instance<class_OS_method_create_instance>`\ (\ arguments\: :ref:`PackedStringArray<class_PackedStringArray>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`create_process<class_OS_method_create_process>`\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, open_console\: :ref:`bool<class_bool>` = false\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`delay_msec<class_OS_method_delay_msec>`\ (\ msec\: :ref:`int<class_int>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`delay_usec<class_OS_method_delay_usec>`\ (\ usec\: :ref:`int<class_int>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`execute<class_OS_method_execute>`\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, output\: :ref:`Array<class_Array>` = [], read_stderr\: :ref:`bool<class_bool>` = false, open_console\: :ref:`bool<class_bool>` = false\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Dictionary<class_Dictionary>` | :ref:`execute_with_pipe<class_OS_method_execute_with_pipe>`\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, blocking\: :ref:`bool<class_bool>` = true\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Key<enum_@GlobalScope_Key>` | :ref:`find_keycode_from_string<class_OS_method_find_keycode_from_string>`\ (\ string\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_cache_dir<class_OS_method_get_cache_dir>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_cmdline_args<class_OS_method_get_cmdline_args>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_cmdline_user_args<class_OS_method_get_cmdline_user_args>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_config_dir<class_OS_method_get_config_dir>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_connected_midi_inputs<class_OS_method_get_connected_midi_inputs>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_data_dir<class_OS_method_get_data_dir>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_distribution_name<class_OS_method_get_distribution_name>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`get_entropy<class_OS_method_get_entropy>`\ (\ size\: :ref:`int<class_int>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_environment<class_OS_method_get_environment>`\ (\ variable\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_executable_path<class_OS_method_get_executable_path>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_granted_permissions<class_OS_method_get_granted_permissions>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_keycode_string<class_OS_method_get_keycode_string>`\ (\ code\: :ref:`Key<enum_@GlobalScope_Key>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_locale<class_OS_method_get_locale>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_locale_language<class_OS_method_get_locale_language>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_main_thread_id<class_OS_method_get_main_thread_id>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Dictionary<class_Dictionary>` | :ref:`get_memory_info<class_OS_method_get_memory_info>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_model_name<class_OS_method_get_model_name>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_name<class_OS_method_get_name>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_process_exit_code<class_OS_method_get_process_exit_code>`\ (\ pid\: :ref:`int<class_int>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_process_id<class_OS_method_get_process_id>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_processor_count<class_OS_method_get_processor_count>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_processor_name<class_OS_method_get_processor_name>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_restart_on_exit_arguments<class_OS_method_get_restart_on_exit_arguments>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_static_memory_peak_usage<class_OS_method_get_static_memory_peak_usage>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_static_memory_usage<class_OS_method_get_static_memory_usage>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`StdHandleType<enum_OS_StdHandleType>` | :ref:`get_stderr_type<class_OS_method_get_stderr_type>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`StdHandleType<enum_OS_StdHandleType>` | :ref:`get_stdin_type<class_OS_method_get_stdin_type>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`StdHandleType<enum_OS_StdHandleType>` | :ref:`get_stdout_type<class_OS_method_get_stdout_type>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_system_ca_certificates<class_OS_method_get_system_ca_certificates>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_system_dir<class_OS_method_get_system_dir>`\ (\ dir\: :ref:`SystemDir<enum_OS_SystemDir>`, shared_storage\: :ref:`bool<class_bool>` = true\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_system_font_path<class_OS_method_get_system_font_path>`\ (\ font_name\: :ref:`String<class_String>`, weight\: :ref:`int<class_int>` = 400, stretch\: :ref:`int<class_int>` = 100, italic\: :ref:`bool<class_bool>` = false\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_system_font_path_for_text<class_OS_method_get_system_font_path_for_text>`\ (\ font_name\: :ref:`String<class_String>`, text\: :ref:`String<class_String>`, locale\: :ref:`String<class_String>` = "", script\: :ref:`String<class_String>` = "", weight\: :ref:`int<class_int>` = 400, stretch\: :ref:`int<class_int>` = 100, italic\: :ref:`bool<class_bool>` = false\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_system_fonts<class_OS_method_get_system_fonts>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_temp_dir<class_OS_method_get_temp_dir>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`int<class_int>` | :ref:`get_thread_caller_id<class_OS_method_get_thread_caller_id>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_unique_id<class_OS_method_get_unique_id>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_user_data_dir<class_OS_method_get_user_data_dir>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_version<class_OS_method_get_version>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`get_version_alias<class_OS_method_get_version_alias>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedStringArray<class_PackedStringArray>` | :ref:`get_video_adapter_driver_info<class_OS_method_get_video_adapter_driver_info>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`has_environment<class_OS_method_has_environment>`\ (\ variable\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`has_feature<class_OS_method_has_feature>`\ (\ tag_name\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_debug_build<class_OS_method_is_debug_build>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_keycode_unicode<class_OS_method_is_keycode_unicode>`\ (\ code\: :ref:`int<class_int>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_process_running<class_OS_method_is_process_running>`\ (\ pid\: :ref:`int<class_int>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_restart_on_exit_set<class_OS_method_is_restart_on_exit_set>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_sandboxed<class_OS_method_is_sandboxed>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_stdout_verbose<class_OS_method_is_stdout_verbose>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`is_userfs_persistent<class_OS_method_is_userfs_persistent>`\ (\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`kill<class_OS_method_kill>`\ (\ pid\: :ref:`int<class_int>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`move_to_trash<class_OS_method_move_to_trash>`\ (\ path\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`open_midi_inputs<class_OS_method_open_midi_inputs>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`open_with_program<class_OS_method_open_with_program>`\ (\ program_path\: :ref:`String<class_String>`, paths\: :ref:`PackedStringArray<class_PackedStringArray>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`PackedByteArray<class_PackedByteArray>` | :ref:`read_buffer_from_stdin<class_OS_method_read_buffer_from_stdin>`\ (\ buffer_size\: :ref:`int<class_int>` = 1024\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`String<class_String>` | :ref:`read_string_from_stdin<class_OS_method_read_string_from_stdin>`\ (\ buffer_size\: :ref:`int<class_int>` = 1024\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`remove_logger<class_OS_method_remove_logger>`\ (\ logger\: :ref:`Logger<class_Logger>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`request_permission<class_OS_method_request_permission>`\ (\ name\: :ref:`String<class_String>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`bool<class_bool>` | :ref:`request_permissions<class_OS_method_request_permissions>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`revoke_granted_permissions<class_OS_method_revoke_granted_permissions>`\ (\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_environment<class_OS_method_set_environment>`\ (\ variable\: :ref:`String<class_String>`, value\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_restart_on_exit<class_OS_method_set_restart_on_exit>`\ (\ restart\: :ref:`bool<class_bool>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>` = PackedStringArray()\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`set_thread_name<class_OS_method_set_thread_name>`\ (\ name\: :ref:`String<class_String>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`set_use_file_access_save_and_swap<class_OS_method_set_use_file_access_save_and_swap>`\ (\ enabled\: :ref:`bool<class_bool>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`shell_open<class_OS_method_shell_open>`\ (\ uri\: :ref:`String<class_String>`\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`shell_show_in_file_manager<class_OS_method_shell_show_in_file_manager>`\ (\ file_or_dir_path\: :ref:`String<class_String>`, open_folder\: :ref:`bool<class_bool>` = true\ ) |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| |void| | :ref:`unset_environment<class_OS_method_unset_environment>`\ (\ variable\: :ref:`String<class_String>`\ ) |const| |
+---------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
枚举
----
.. _enum_OS_RenderingDriver:
.. rst-class:: classref-enumeration
enum **RenderingDriver**: :ref:`🔗<enum_OS_RenderingDriver>`
.. _class_OS_constant_RENDERING_DRIVER_VULKAN:
.. rst-class:: classref-enumeration-constant
:ref:`RenderingDriver<enum_OS_RenderingDriver>` **RENDERING_DRIVER_VULKAN** = ``0``
Vulkan 渲染驱动。需要支持 Vulkan 1.0,而 Vulkan 1.1 和 1.2 的功能则会在支持时自动使用。
.. _class_OS_constant_RENDERING_DRIVER_OPENGL3:
.. rst-class:: classref-enumeration-constant
:ref:`RenderingDriver<enum_OS_RenderingDriver>` **RENDERING_DRIVER_OPENGL3** = ``1``
OpenGL 3 渲染驱动。在桌面平台上使用 OpenGL 3.3 核心配置,在移动设备上使用 OpenGL ES 3.0,在 Web 上使用 WebGL 2.0。
.. _class_OS_constant_RENDERING_DRIVER_D3D12:
.. rst-class:: classref-enumeration-constant
:ref:`RenderingDriver<enum_OS_RenderingDriver>` **RENDERING_DRIVER_D3D12** = ``2``
Direct3D 12 渲染驱动。
.. _class_OS_constant_RENDERING_DRIVER_METAL:
.. rst-class:: classref-enumeration-constant
:ref:`RenderingDriver<enum_OS_RenderingDriver>` **RENDERING_DRIVER_METAL** = ``3``
Metal 渲染驱动。
.. rst-class:: classref-item-separator
----
.. _enum_OS_SystemDir:
.. rst-class:: classref-enumeration
enum **SystemDir**: :ref:`🔗<enum_OS_SystemDir>`
.. _class_OS_constant_SYSTEM_DIR_DESKTOP:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_DESKTOP** = ``0``
指桌面目录路径。
.. _class_OS_constant_SYSTEM_DIR_DCIM:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_DCIM** = ``1``
指 DCIM数码相机图像目录路径。
.. _class_OS_constant_SYSTEM_DIR_DOCUMENTS:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_DOCUMENTS** = ``2``
指文档目录路径。
.. _class_OS_constant_SYSTEM_DIR_DOWNLOADS:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_DOWNLOADS** = ``3``
指下载目录路径。
.. _class_OS_constant_SYSTEM_DIR_MOVIES:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_MOVIES** = ``4``
指电影(或视频)目录路径。
.. _class_OS_constant_SYSTEM_DIR_MUSIC:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_MUSIC** = ``5``
指音乐目录路径。
.. _class_OS_constant_SYSTEM_DIR_PICTURES:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_PICTURES** = ``6``
指图片目录路径。
.. _class_OS_constant_SYSTEM_DIR_RINGTONES:
.. rst-class:: classref-enumeration-constant
:ref:`SystemDir<enum_OS_SystemDir>` **SYSTEM_DIR_RINGTONES** = ``7``
指铃声目录路径。
.. rst-class:: classref-item-separator
----
.. _enum_OS_StdHandleType:
.. rst-class:: classref-enumeration
enum **StdHandleType**: :ref:`🔗<enum_OS_StdHandleType>`
.. _class_OS_constant_STD_HANDLE_INVALID:
.. rst-class:: classref-enumeration-constant
:ref:`StdHandleType<enum_OS_StdHandleType>` **STD_HANDLE_INVALID** = ``0``
标准 I/O 设备无效。无法用这些标准 I/O 设备接收和发送数据。
.. _class_OS_constant_STD_HANDLE_CONSOLE:
.. rst-class:: classref-enumeration-constant
:ref:`StdHandleType<enum_OS_StdHandleType>` **STD_HANDLE_CONSOLE** = ``1``
标准 I/O 设备为控制台。通常发生在从终端运行 Godot 且未进行重定向的场合。在桌面平台上,从编辑器运行 Godot 时也会用于所有标准 I/O 设备。
.. _class_OS_constant_STD_HANDLE_FILE:
.. rst-class:: classref-enumeration-constant
:ref:`StdHandleType<enum_OS_StdHandleType>` **STD_HANDLE_FILE** = ``2``
标准 I/O 设备为普通文件。通常发生在终端重定向的场合,例如 ``godot > stdout.txt``\ 、\ ``godot < stdin.txt````godot > stdout_stderr.txt 2>&1``\ 。
.. _class_OS_constant_STD_HANDLE_PIPE:
.. rst-class:: classref-enumeration-constant
:ref:`StdHandleType<enum_OS_StdHandleType>` **STD_HANDLE_PIPE** = ``3``
标准 I/O 设备为 FIFO 或管道。通常发生在终端用到了管道的场合,例如 ``echo "Hello" | godot``\ 。
.. _class_OS_constant_STD_HANDLE_UNKNOWN:
.. rst-class:: classref-enumeration-constant
:ref:`StdHandleType<enum_OS_StdHandleType>` **STD_HANDLE_UNKNOWN** = ``4``
标准 I/O 设备类型未知。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
属性说明
--------
.. _class_OS_property_delta_smoothing:
.. rst-class:: classref-property
:ref:`bool<class_bool>` **delta_smoothing** = ``true`` :ref:`🔗<class_OS_property_delta_smoothing>`
.. rst-class:: classref-property-setget
- |void| **set_delta_smoothing**\ (\ value\: :ref:`bool<class_bool>`\ )
- :ref:`bool<class_bool>` **is_delta_smoothing_enabled**\ (\ )
如果为 ``true``\ ,则引擎会在每帧之间过滤测量得到的时间增量,并尝试补偿随机变化。这仅适用于垂直同步处于活动状态的系统。
\ **注意:**\ 启动时,这与 :ref:`ProjectSettings.application/run/delta_smoothing<class_ProjectSettings_property_application/run/delta_smoothing>` 相同。
.. rst-class:: classref-item-separator
----
.. _class_OS_property_low_processor_usage_mode:
.. rst-class:: classref-property
:ref:`bool<class_bool>` **low_processor_usage_mode** = ``false`` :ref:`🔗<class_OS_property_low_processor_usage_mode>`
.. rst-class:: classref-property-setget
- |void| **set_low_processor_usage_mode**\ (\ value\: :ref:`bool<class_bool>`\ )
- :ref:`bool<class_bool>` **is_in_low_processor_usage_mode**\ (\ )
如果为 ``true``\ ,则引擎会通过只在需要时刷新屏幕来优化处理器的使用。可以改善移动设备上的电池消耗。
\ **注意:**\ 启动时,这与 :ref:`ProjectSettings.application/run/low_processor_mode<class_ProjectSettings_property_application/run/low_processor_mode>` 相同。
.. rst-class:: classref-item-separator
----
.. _class_OS_property_low_processor_usage_mode_sleep_usec:
.. rst-class:: classref-property
:ref:`int<class_int>` **low_processor_usage_mode_sleep_usec** = ``6900`` :ref:`🔗<class_OS_property_low_processor_usage_mode_sleep_usec>`
.. rst-class:: classref-property-setget
- |void| **set_low_processor_usage_mode_sleep_usec**\ (\ value\: :ref:`int<class_int>`\ )
- :ref:`int<class_int>` **get_low_processor_usage_mode_sleep_usec**\ (\ )
启用低处理器使用模式时帧之间的睡眠时间,以微秒为单位。更高的值将导致更低的 CPU 使用率。另见 :ref:`low_processor_usage_mode<class_OS_property_low_processor_usage_mode>`\ 。
\ **注意:**\ 启动时,这与 :ref:`ProjectSettings.application/run/low_processor_mode_sleep_usec<class_ProjectSettings_property_application/run/low_processor_mode_sleep_usec>` 相同。
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
方法说明
--------
.. _class_OS_method_add_logger:
.. rst-class:: classref-method
|void| **add_logger**\ (\ logger\: :ref:`Logger<class_Logger>`\ ) :ref:`🔗<class_OS_method_add_logger>`
添加自定义日志记录器,拦截内部消息流。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_alert:
.. rst-class:: classref-method
|void| **alert**\ (\ text\: :ref:`String<class_String>`, title\: :ref:`String<class_String>` = "Alert!"\ ) :ref:`🔗<class_OS_method_alert>`
使用主机平台的实现显示一个模式对话框。引擎执行将被阻塞,直到该对话框被关闭。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_close_midi_inputs:
.. rst-class:: classref-method
|void| **close_midi_inputs**\ (\ ) :ref:`🔗<class_OS_method_close_midi_inputs>`
关闭系统 MIDI 驱动程序。Godot 将不再接收 :ref:`InputEventMIDI<class_InputEventMIDI>`\ 。另见 :ref:`open_midi_inputs()<class_OS_method_open_midi_inputs>`:ref:`get_connected_midi_inputs()<class_OS_method_get_connected_midi_inputs>`\ 。
\ **注意:**\ 该方法在 Linux、macOS、Windows 和 Web 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_crash:
.. rst-class:: classref-method
|void| **crash**\ (\ message\: :ref:`String<class_String>`\ ) :ref:`🔗<class_OS_method_crash>`
使引擎崩溃(如果在 ``@tool`` 脚本中调用,则使编辑器崩溃)。另见 :ref:`kill()<class_OS_method_kill>`\ 。
\ **注意:**\ 该方法应该\ *仅*\ 用于测试系统的崩溃处理器,而不用于任何其他目的。对于一般错误报告,请使用(按优先顺序)\ :ref:`@GDScript.assert()<class_@GDScript_method_assert>`\ 、\ :ref:`@GlobalScope.push_error()<class_@GlobalScope_method_push_error>`\ 、\ :ref:`alert()<class_OS_method_alert>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_create_instance:
.. rst-class:: classref-method
:ref:`int<class_int>` **create_instance**\ (\ arguments\: :ref:`PackedStringArray<class_PackedStringArray>`\ ) :ref:`🔗<class_OS_method_create_instance>`
创建一个独立运行的 Godot 新实例。\ ``arguments`` 按给定顺序使用,并以空格分隔。
如果进程创建成功,则该方法将返回新的进程 ID可以使用它来监视该进程并可能使用 :ref:`kill()<class_OS_method_kill>` 终止它)。如果进程无法创建,则该方法将返回 ``-1``\ 。
如果你希望运行不同的进程,请参阅 :ref:`create_process()<class_OS_method_create_process>`\ 。
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_create_process:
.. rst-class:: classref-method
:ref:`int<class_int>` **create_process**\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, open_console\: :ref:`bool<class_bool>` = false\ ) :ref:`🔗<class_OS_method_create_process>`
创建一个独立于 Godot 运行的新进程。Godot 终止时它也不会终止。\ ``path`` 中指定的路径必须存在,并且是可执行文件或 macOS 的 ``.app`` 捆绑包。将使用平台路径解析。\ ``arguments`` 按给定顺序使用,并以空格分隔。
在 Windows 上,如果 ``open_console````true`` 并且该进程是一个控制台应用程序,则会打开新的终端窗口。
如果进程创建成功,则该方法将返回新的进程 ID可以用来监视进程也可以通过 :ref:`kill()<class_OS_method_kill>` 来终止进程)。否则该方法返回 ``-1``\ 。
\ **示例:**\ 运行当前项目的另一个实例:
.. tabs::
.. code-tab:: gdscript
var pid = OS.create_process(OS.get_executable_path(), [])
.. code-tab:: csharp
var pid = OS.CreateProcess(OS.GetExecutablePath(), []);
如果希望运行外部命令并获取结果,请参阅 :ref:`execute()<class_OS_method_execute>`\ 。
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
\ **注意:**\ 在 macOS 上,沙盒应用程序被限制为只能运行嵌入式辅助可执行文件,在导出或系统 .app 捆绑包期间指定,系统 .app 捆绑包将忽略参数。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_delay_msec:
.. rst-class:: classref-method
|void| **delay_msec**\ (\ msec\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OS_method_delay_msec>`
将当前线程的执行延迟 ``msec`` 毫秒。\ ``msec`` 必须大于或等于 ``0``\ 。否则,\ :ref:`delay_msec()<class_OS_method_delay_msec>` 不执行任何操作并打印一条错误消息。
\ **注意:**\ :ref:`delay_msec()<class_OS_method_delay_msec>` 是一种\ *阻塞*\ 延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 :ref:`SceneTree.create_timer()<class_SceneTree_method_create_timer>`\ 。使用 :ref:`SceneTreeTimer<class_SceneTreeTimer>` 等待会延迟位于 ``await`` 下方的代码的执行,而不会影响该项目(或编辑器,对于 :ref:`EditorPlugin<class_EditorPlugin>`:ref:`EditorScript<class_EditorScript>`\ )的其余部分。
\ **注意:**\ 当在主线程上调用 :ref:`delay_msec()<class_OS_method_delay_msec>` 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 :ref:`delay_msec()<class_OS_method_delay_msec>` 作为 :ref:`EditorPlugin<class_EditorPlugin>`:ref:`EditorScript<class_EditorScript>` 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_delay_usec:
.. rst-class:: classref-method
|void| **delay_usec**\ (\ usec\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OS_method_delay_usec>`
将当前线程的执行延迟 ``usec`` 微秒。\ ``usec`` 必须大于或等于 ``0``\ 。否则,\ :ref:`delay_usec()<class_OS_method_delay_usec>` 不执行任何操作并打印一条错误消息。
\ **注意:**\ :ref:`delay_usec()<class_OS_method_delay_usec>` 是一种\ *阻塞*\ 延迟代码执行的方式。要以非阻塞的方式延迟代码执行,请参阅 :ref:`SceneTree.create_timer()<class_SceneTree_method_create_timer>`\ 。使用 :ref:`SceneTreeTimer<class_SceneTreeTimer>` 等待会延迟放置在 ``await`` 下方的代码的执行,而不会影响该项目(或编辑器,对于 :ref:`EditorPlugin<class_EditorPlugin>`:ref:`EditorScript<class_EditorScript>`\ )的其余部分。
\ **注意:**\ 当在主线程上调用 :ref:`delay_usec()<class_OS_method_delay_usec>` 时,它将冻结项目并阻止它重新绘制和注册输入,直到延迟结束。当使用 :ref:`delay_usec()<class_OS_method_delay_usec>` 作为 :ref:`EditorPlugin<class_EditorPlugin>`:ref:`EditorScript<class_EditorScript>` 的一部分时,它会冻结编辑器但不会冻结当前正在运行的项目(因为项目是一个独立的子进程)。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_execute:
.. rst-class:: classref-method
:ref:`int<class_int>` **execute**\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, output\: :ref:`Array<class_Array>` = [], read_stderr\: :ref:`bool<class_bool>` = false, open_console\: :ref:`bool<class_bool>` = false\ ) :ref:`🔗<class_OS_method_execute>`
以\ *阻塞*\ 方式执行给定进程。\ ``path`` 中指定的文件必须存在且可执行。将使用系统路径解析。\ ``arguments`` 按给定顺序使用,用空格分隔,并用引号包裹。
如果提供了 ``output`` 数组,则进程的完整 shell 输出,将作为单个 :ref:`String<class_String>` 元素被追加到 ``output``\ 。如果 ``read_stderr````true``\ ,则标准错误流的输出也会被追加到数组中。
在 Windows 上,如果 ``open_console````true`` 并且进程是控制台应用程序,则会打开一个新的终端窗口。
该方法返回命令的退出代码,如果进程执行失败,则返回 ``-1``\ 。
\ **注意:**\ 主线程将被阻塞,直到执行的命令终止。使用 :ref:`Thread<class_Thread>` 创建一个不会阻塞主线程的独立线程,或者使用 :ref:`create_process()<class_OS_method_create_process>` 创建一个完全独立的进程。
例如,要检索工作目录内容的列表:
.. tabs::
.. code-tab:: gdscript
var output = []
var exit_code = OS.execute("ls", ["-l", "/tmp"], output)
.. code-tab:: csharp
Godot.Collections.Array output = [];
int exitCode = OS.Execute("ls", ["-l", "/tmp"], output);
如果希望访问内置的 shell 或执行复合命令,则可以调用特定于平台的 shell。例如
.. tabs::
.. code-tab:: gdscript
var output = []
OS.execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output)
.. code-tab:: csharp
Godot.Collections.Array output = [];
OS.Execute("CMD.exe", ["/C", "cd %TEMP% && dir"], output);
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
\ **注意:**\ 要执行 Windows 命令解释器的内置命令,在 ``path`` 中指定 ``cmd.exe``\ ,将 ``/c`` 作为第一个参数,并将所需的命令作为第二个参数。
\ **注意:**\ 要执行 PowerShell 的内置命令,在 ``path`` 中指定 ``powershell.exe``\ ,将 ``-Command`` 作为第一个参数,然后将所需的命令作为第二个参数。
\ **注意:**\ 要执行 Unix shell 内置命令,请在 ``path`` 中指定 shell 可执行文件名称,将 ``-c`` 作为第一个参数,并将所需的命令作为第二个参数。
\ **注意:**\ 在 macOS 上,沙盒应用程序仅限于运行在导出期间指定的嵌入的辅助可执行文件。
\ **注意:**\ 在 Android 上,\ ``dumpsys`` 等系统命令只能在 root 设备上运行。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_execute_with_pipe:
.. rst-class:: classref-method
:ref:`Dictionary<class_Dictionary>` **execute_with_pipe**\ (\ path\: :ref:`String<class_String>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>`, blocking\: :ref:`bool<class_bool>` = true\ ) :ref:`🔗<class_OS_method_execute_with_pipe>`
创建一个独立于 Godot 运行的新进程并重定向 IO。Godot 终止时它也不会终止。\ ``path`` 中指定的路径必须存在,并且是可执行文件或 macOS 的 ``.app`` 捆绑包。将使用平台路径解析。\ ``arguments`` 按给定顺序使用,并以空格分隔。
如果 ``blocking````false``\ ,则创建的管道使用非阻塞模式,即读写操作会立即返回。请使用 :ref:`FileAccess.get_error()<class_FileAccess_method_get_error>` 检查最近一次读写操作是否成功。
如果无法创建进程,则该方法返回空的 :ref:`Dictionary<class_Dictionary>`\ 。否则该方法会返回一个 :ref:`Dictionary<class_Dictionary>`\ ,包含以下字段:
- ``"stdio"`` - 用于访问进程 stdin 和 stdout 管道的 :ref:`FileAccess<class_FileAccess>`\ (读写)。
- ``"stderr"`` - 用于访问进程 stderr 管道的 :ref:`FileAccess<class_FileAccess>`\ (只读)。
- ``"pid"`` - :ref:`int<class_int>` 形式的进程 ID可以用来监视进程也可以通过 :ref:`kill()<class_OS_method_kill>` 来终止进程)。
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
\ **注意:**\ 如果要执行 Windows 命令解释器的内置命令,请在 ``path`` 中指定 ``cmd.exe``\ ,使用 ``/c`` 作为第一个参数并将所需的命令作为第二个参数。
\ **注意:**\ 如果要执行 PowerShell 的内置命令,请在 ``path`` 中指定 ``powershell.exe``\ ,使用 ``-Command`` 作为第一个参数并将所需的命令作为第二个参数。
\ **注意:**\ 如果要执行 Unix Shell 的内置命令,请在 ``path`` 中指定 shell 可执行文件的名称,使用 ``-c`` 作为第一个参数并将所需的命令作为第二个参数。
\ **注意:**\ 在 macOS 上,沙盒应用程序被限制为只能运行嵌入式辅助可执行文件,在导出或系统 .app 捆绑包期间指定,系统 .app 捆绑包将忽略参数。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_find_keycode_from_string:
.. rst-class:: classref-method
:ref:`Key<enum_@GlobalScope_Key>` **find_keycode_from_string**\ (\ string\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_find_keycode_from_string>`
查找给定字符串对应的键码。返回值等价于 :ref:`Key<enum_@GlobalScope_Key>` 常量。
.. tabs::
.. code-tab:: gdscript
print(OS.find_keycode_from_string("C")) # 输出 67 (KEY_C)
print(OS.find_keycode_from_string("Escape")) # 输出 4194305 (KEY_ESCAPE)
print(OS.find_keycode_from_string("Shift+Tab")) # 输出 37748738 (KEY_MASK_SHIFT | KEY_TAB)
print(OS.find_keycode_from_string("Unknown")) # 输出 0 (KEY_NONE)
.. code-tab:: csharp
GD.Print(OS.FindKeycodeFromString("C")); // 输出 C (Key.C)
GD.Print(OS.FindKeycodeFromString("Escape")); // 输出 Escape (Key.Escape)
GD.Print(OS.FindKeycodeFromString("Shift+Tab")); // 输出 37748738 (KeyModifierMask.MaskShift | Key.Tab)
GD.Print(OS.FindKeycodeFromString("Unknown")); // 输出 None (Key.None)
另见 :ref:`get_keycode_string()<class_OS_method_get_keycode_string>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_cache_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_cache_dir**\ (\ ) |const| :ref:`🔗<class_OS_method_get_cache_dir>`
根据操作系统的标准返回\ *全局*\ 缓存数据目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 ``XDG_CACHE_HOME`` 环境变量来覆盖该路径。有关详细信息,请参阅文档中的\ :doc:`《Godot 项目中的文件路径》 <../tutorials/io/data_paths>`\ 。另见 :ref:`get_config_dir()<class_OS_method_get_config_dir>`:ref:`get_data_dir()<class_OS_method_get_data_dir>`\ 。
不要与 :ref:`get_user_data_dir()<class_OS_method_get_user_data_dir>` 混淆,后者返回\ *项目特定的*\ 用户数据路径。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_cmdline_args:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_cmdline_args**\ (\ ) :ref:`🔗<class_OS_method_get_cmdline_args>`
Returns the command-line arguments passed to the engine, excluding arguments processed by the engine, such as ``--headless`` and ``--fullscreen``.
::
# Godot has been executed with the following command:
# godot --headless --verbose --scene my_scene.tscn --custom
OS.get_cmdline_args() # Returns ["--scene", "my_scene.tscn", "--custom"]
Command-line arguments can be written in any form, including both ``--key value`` and ``--key=value`` forms so they can be properly parsed, as long as custom command-line arguments do not conflict with engine arguments.
You can also incorporate environment variables using the :ref:`get_environment()<class_OS_method_get_environment>` method.
You can set :ref:`ProjectSettings.editor/run/main_run_args<class_ProjectSettings_property_editor/run/main_run_args>` to define command-line arguments to be passed by the editor when running the project.
\ **Example:** Parse command-line arguments into a :ref:`Dictionary<class_Dictionary>` using the ``--key=value`` form for arguments:
.. tabs::
.. code-tab:: gdscript
var arguments = {}
for argument in OS.get_cmdline_args():
if argument.contains("="):
var key_value = argument.split("=")
arguments[key_value[0].trim_prefix("--")] = key_value[1]
else:
# Options without an argument will be present in the dictionary,
# with the value set to an empty string.
arguments[argument.trim_prefix("--")] = ""
.. code-tab:: csharp
var arguments = new Dictionary<string, string>();
foreach (var argument in OS.GetCmdlineArgs())
{
if (argument.Contains('='))
{
string[] keyValue = argument.Split("=");
arguments[keyValue[0].TrimPrefix("--")] = keyValue[1];
}
else
{
// Options without an argument will be present in the dictionary,
// with the value set to an empty string.
arguments[argument.TrimPrefix("--")] = "";
}
}
\ **Note:** Passing custom user arguments directly is not recommended, as the engine may discard or modify them. Instead, pass the standard UNIX double dash (``--``) and then the custom arguments, which the engine will ignore by design. These can be read via :ref:`get_cmdline_user_args()<class_OS_method_get_cmdline_user_args>`.
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_cmdline_user_args:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_cmdline_user_args**\ (\ ) :ref:`🔗<class_OS_method_get_cmdline_user_args>`
Returns the command-line user arguments passed to the engine. User arguments are ignored by the engine and reserved for the user. They are passed after the double dash ``--`` argument. ``++`` may be used when ``--`` is intercepted by another program (such as ``startx``).
::
# Godot has been executed with the following command:
# godot --fullscreen --custom -- --level=2 --hardcore
OS.get_cmdline_args() # Returns ["--custom"]
OS.get_cmdline_user_args() # Returns ["--level=2", "--hardcore"]
To get arguments passed before ``--`` or ``++``, use :ref:`get_cmdline_args()<class_OS_method_get_cmdline_args>`.
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_config_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_config_dir**\ (\ ) |const| :ref:`🔗<class_OS_method_get_config_dir>`
根据操作系统的标准,返回\ *全局*\ 用户配置目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 ``XDG_CONFIG_HOME`` 环境变量来覆盖该路径。有关详细信息,请参阅文档中的\ :doc:`《Godot 项目中的文件路径》 <../tutorials/io/data_paths>`\ 。另见 :ref:`get_cache_dir()<class_OS_method_get_cache_dir>`:ref:`get_data_dir()<class_OS_method_get_data_dir>`\ 。
不要与 :ref:`get_user_data_dir()<class_OS_method_get_user_data_dir>` 混淆,后者返回\ *项目专用的*\ 用户数据路径。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_connected_midi_inputs:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_connected_midi_inputs**\ (\ ) :ref:`🔗<class_OS_method_get_connected_midi_inputs>`
如果存在已连接的 MIDI 设备,则返回设备名称的数组。如果尚未使用 :ref:`open_midi_inputs()<class_OS_method_open_midi_inputs>` 初始化系统 MIDI 驱动,则返回空数组。另见 :ref:`close_midi_inputs()<class_OS_method_close_midi_inputs>`\ 。
\ **注意:**\ 该方法在 Linux、macOS、Windows 和 Web 上实现。
\ **注意:**\ 在 Web 平台上,浏览器需要支持 Web MIDI。\ `目前 <https://caniuse.com/midi>`__\ 主流浏览器中除了 Safari 都支持。
\ **注意:**\ 在 Web 平台上,需要在浏览器中授权才能使用 MIDI 输入。权限请求会在调用 :ref:`open_midi_inputs()<class_OS_method_open_midi_inputs>` 时进行。用户接受权限请求后浏览器才会处理 MIDI 输入。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_data_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_data_dir**\ (\ ) |const| :ref:`🔗<class_OS_method_get_data_dir>`
根据操作系统的标准返回\ *全局*\ 用户数据目录。
在 Linux/BSD 平台上,可以通过在启动项目之前设置 ``XDG_DATA_HOME`` 环境变量来覆盖该路径。有关详细信息,请参阅文档中的\ :doc:`《Godot 项目中的文件路径》 <../tutorials/io/data_paths>`\ 。另见 :ref:`get_cache_dir()<class_OS_method_get_cache_dir>`:ref:`get_config_dir()<class_OS_method_get_config_dir>`\ 。
不要与 :ref:`get_user_data_dir()<class_OS_method_get_user_data_dir>` 混淆,后者返回\ *项目专用的*\ 用户数据路径。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_distribution_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_distribution_name**\ (\ ) |const| :ref:`🔗<class_OS_method_get_distribution_name>`
返回 Linux 和 BSD 平台的发行版名称(例如 “Ubuntu”、“Manjaro”、“OpenBSD” 等)。
对于原生 Android 系统,返回与 :ref:`get_name()<class_OS_method_get_name>` 相同的值,但对于 “LineageOS” 等流行的 Android 派生系统,尝试返回自定义 ROM 名称。
对于其他平台,返回与 :ref:`get_name()<class_OS_method_get_name>` 相同的值。
\ **注意:**\ Web 平台上不支持这个方法。返回的是空字符串。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_entropy:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **get_entropy**\ (\ size\: :ref:`int<class_int>`\ ) :ref:`🔗<class_OS_method_get_entropy>`
生成填充了密码学安全随机字节的 :ref:`PackedByteArray<class_PackedByteArray>`\ ,大小为 ``size``\ 。
\ **注意:**\ 在大部分平台上,使用该方法生成大量字节可能会造成锁定、让熵的质量变低。大多数情况下请使用 :ref:`Crypto.generate_random_bytes()<class_Crypto_method_generate_random_bytes>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_environment:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_environment**\ (\ variable\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_get_environment>`
返回给定环境变量的值,如果 ``variable`` 不存在,则返回一串空字符串。
\ **注意:**\ 请仔细检查 ``variable`` 的大小写。环境变量名称在除 Windows 之外的所有平台上都区分大小写。
\ **注意:**\ 在 macOS 上,应用程序无权访问 shell 环境变量。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_executable_path:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_executable_path**\ (\ ) |const| :ref:`🔗<class_OS_method_get_executable_path>`
返回当前引擎可执行文件的文件路径。
\ **注意:**\ 如果想要在 macOS 上运行新的 Godot 实例,请始终使用 :ref:`create_instance()<class_OS_method_create_instance>`\ ,不要依赖可执行文件的路径。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_granted_permissions:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_granted_permissions**\ (\ ) |const| :ref:`🔗<class_OS_method_get_granted_permissions>`
在 Android 设备上:返回已授予的危险权限列表。
在 macOS 上:返回已授予权限列表以及应用程序可访问的用户选择的文件夹列表(仅限沙盒应用程序)。使用原生文件对话框请求文件夹访问权限。
在 iOS、visionOS 上:返回已授予权限列表。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_keycode_string:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_keycode_string**\ (\ code\: :ref:`Key<enum_@GlobalScope_Key>`\ ) |const| :ref:`🔗<class_OS_method_get_keycode_string>`
:ref:`String<class_String>` 的形式返回给定的键码。
.. tabs::
.. code-tab:: gdscript
print(OS.get_keycode_string(KEY_C)) # 输出 "C"
print(OS.get_keycode_string(KEY_ESCAPE)) # 输出 "Escape"
print(OS.get_keycode_string(KEY_MASK_SHIFT | KEY_TAB)) # 输出 "Shift+Tab"
.. code-tab:: csharp
GD.Print(OS.GetKeycodeString(Key.C)); // 输出 "C"
GD.Print(OS.GetKeycodeString(Key.Escape)); // 输出 "Escape"
GD.Print(OS.GetKeycodeString((Key)KeyModifierMask.MaskShift | Key.Tab)); // 输出 "Shift+Tab"
另见 :ref:`find_keycode_from_string()<class_OS_method_find_keycode_from_string>`\ 、\ :ref:`InputEventKey.keycode<class_InputEventKey_property_keycode>`\ 、\ :ref:`InputEventKey.get_keycode_with_modifiers()<class_InputEventKey_method_get_keycode_with_modifiers>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_locale:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_locale**\ (\ ) |const| :ref:`🔗<class_OS_method_get_locale>`
``language_Script_COUNTRY_VARIANT@extra`` 形式的 :ref:`String<class_String>` 返回主机操作系统区域设置。\ ``language`` 之后的每个子字符串都是可选的,并且可能不存在。
- ``language`` - 2 个或 3 个字母的\ `语言代码 <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__\ ,小写。
- ``Script`` - 4 个字母的\ `文字代码 <https://en.wikipedia.org/wiki/ISO_15924>`__\ ,首字母大写。
- ``COUNTRY`` - 2 个或 3 个字母的\ `国家地区代码 <https://en.wikipedia.org/wiki/ISO_3166-1>`__\ ,大写。
- ``VARIANT`` - 语言变体,地区和排序顺序。变体可以有任意数量的带下划线的关键字。
- ``extra`` - 分号分隔的附加关键字列表。这可能包含货币、日历、排序顺序和编号系统信息。
如果你只需要语言代码而不是操作系统中完全指定的区域设置,则可以使用 :ref:`get_locale_language()<class_OS_method_get_locale_language>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_locale_language:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_locale_language**\ (\ ) |const| :ref:`🔗<class_OS_method_get_locale_language>`
将主机操作系统区域设置的 2 或 3 个字母的\ `语言代码 <https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>`__\ 作为字符串返回,该字符串应在所有平台上保持一致。这相当于提取 :ref:`get_locale()<class_OS_method_get_locale>` 字符串的 ``language`` 部分。
当你不需要有关国家/地区代码或变体的附加信息时,这可用于将完全指定的区域设置字符串缩小为“通用”语言代码。例如,对于使用 ``fr_CA`` 语言环境的加拿大法语用户,这将返回 ``fr``\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_main_thread_id:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_main_thread_id**\ (\ ) |const| :ref:`🔗<class_OS_method_get_main_thread_id>`
返回主线程的 ID。请参阅 :ref:`get_thread_caller_id()<class_OS_method_get_thread_caller_id>`\ 。
\ **注意:**\ 线程 ID 不是确定的,也许会在应用程序重新启动时被重复使用。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_memory_info:
.. rst-class:: classref-method
:ref:`Dictionary<class_Dictionary>` **get_memory_info**\ (\ ) |const| :ref:`🔗<class_OS_method_get_memory_info>`
返回一个包含有关当前内存的信息的 :ref:`Dictionary<class_Dictionary>`\ ,其中包含以下条目:
- ``"physical"`` - 可用物理内存的总大小,单位为字节。这个值可能比实际的物理内存略小,因为计算时不含由内核以及各种设备所保留的内存。
- ``"free"`` - 无需磁盘访问或其他昂贵操作即可立即分配的物理内存大小,单位为字节。进程也许能够分配更多的物理内存,但是这种操作需要将不活跃的内存页移动至磁盘,这可能会很昂贵。
- ``"available"`` - 无需扩展交换文件即可分配的内存大小,单位为字节。该值包括物理内存和交换空间。
- ``"stack"`` - 当前线程的栈大小,单位为字节。
\ **注意:**\ 每个条目的值在其未知时可能是 ``-1``\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_model_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_model_name**\ (\ ) |const| :ref:`🔗<class_OS_method_get_model_name>`
返回当前设备的型号名称。
\ **注意:**\ 该方法在 Android、iOS、macOS 和 Windows 上实现。在不支持的平台上返回 ``"GenericDevice"``\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_name**\ (\ ) |const| :ref:`🔗<class_OS_method_get_name>`
返回主机平台的名称。
- 在 Windows 上为 ``"Windows"``\ 。
- 在 macOS 上为 ``"macOS"``\ 。
- 在基于 Linux 的操作系统上为 ``"Linux"``\ 。
- 在基于 BSD 的操作系统上为 ``"FreeBSD"``\ 、\ ``"NetBSD"``\ 、\ ``"OpenBSD"``, 会使用 ``"BSD"`` 作为回退方案。
- 在 Android 上为 ``"Android"``\ 。
- 在 iOS 上为 ``"iOS"``\ 。
- 在 Web 上为 ``"Web"``\ 。
\ **注意:**\ 自定义构建的引擎可能支持其他平台,例如游戏主机,可能返回其他值。
.. tabs::
.. code-tab:: gdscript
match OS.get_name():
"Windows":
print("Welcome to Windows!")
"macOS":
print("Welcome to macOS!")
"Linux", "FreeBSD", "NetBSD", "OpenBSD", "BSD":
print("Welcome to Linux/BSD!")
"Android":
print("Welcome to Android!")
"iOS":
print("Welcome to iOS!")
"Web":
print("Welcome to the Web!")
.. code-tab:: csharp
switch (OS.GetName())
{
case "Windows":
GD.Print("Welcome to Windows");
break;
case "macOS":
GD.Print("Welcome to macOS!");
break;
case "Linux":
case "FreeBSD":
case "NetBSD":
case "OpenBSD":
case "BSD":
GD.Print("Welcome to Linux/BSD!");
break;
case "Android":
GD.Print("Welcome to Android!");
break;
case "iOS":
GD.Print("Welcome to iOS!");
break;
case "Web":
GD.Print("Welcome to the Web!");
break;
}
\ **注意:**\ 在 Web 平台上,仍然可以通过功能标签确定主机平台的操作系统。请参阅 :ref:`has_feature()<class_OS_method_has_feature>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_process_exit_code:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_process_exit_code**\ (\ pid\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OS_method_get_process_exit_code>`
在已启动进程运行结束后返回其退出码(见 :ref:`is_process_running()<class_OS_method_is_process_running>`\ )。
如果 ``pid`` 不是已启动子进程的 PID 或者该进程仍在运行,亦或当前平台未实现该方法,则返回 ``-1``\ 。
\ **注意:**\ 如果 ``pid`` 是 macOS 捆绑包 App 进程,则返回 ``-1``\ 。
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_process_id:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_process_id**\ (\ ) |const| :ref:`🔗<class_OS_method_get_process_id>`
返回主机用来唯一标识该应用程序的编号。
\ **注意:**\ 该方法在 Web 上始终返回 ``0``\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_processor_count:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_processor_count**\ (\ ) |const| :ref:`🔗<class_OS_method_get_processor_count>`
返回主机的\ *逻辑* CPU 核心数。对于启用了超线程的 CPU这个数会比\ *物理* CPU 核心数大。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_processor_name:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_processor_name**\ (\ ) |const| :ref:`🔗<class_OS_method_get_processor_name>`
返回主机上 CPU 型号的全名(例如 ``"Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz"``\ )。
\ **注意:**\ 该方法仅在 Windows、macOS、Linux 和 iOS 上实现。在 Android 和 Web 上,\ :ref:`get_processor_name()<class_OS_method_get_processor_name>` 返回空字符串。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_restart_on_exit_arguments:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_restart_on_exit_arguments**\ (\ ) |const| :ref:`🔗<class_OS_method_get_restart_on_exit_arguments>`
返回当项目使用 :ref:`set_restart_on_exit()<class_OS_method_set_restart_on_exit>` 自动重新启动时,将使用的命令行参数列表。另见 :ref:`is_restart_on_exit_set()<class_OS_method_is_restart_on_exit_set>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_static_memory_peak_usage:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_static_memory_peak_usage**\ (\ ) |const| :ref:`🔗<class_OS_method_get_static_memory_peak_usage>`
返回使用的静态内存的最大数量。仅适用于调试版本。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_static_memory_usage:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_static_memory_usage**\ (\ ) |const| :ref:`🔗<class_OS_method_get_static_memory_usage>`
返回程序正在使用的静态内存量,以字节为单位。仅适用于调试版本。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_stderr_type:
.. rst-class:: classref-method
:ref:`StdHandleType<enum_OS_StdHandleType>` **get_stderr_type**\ (\ ) |const| :ref:`🔗<class_OS_method_get_stderr_type>`
返回标准错误设备的类型。
\ **注意:**\ 该方法在 Linux、macOS、Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_stdin_type:
.. rst-class:: classref-method
:ref:`StdHandleType<enum_OS_StdHandleType>` **get_stdin_type**\ (\ ) |const| :ref:`🔗<class_OS_method_get_stdin_type>`
返回标准输入设备的类型。
\ **注意:**\ 该方法在 Linux、macOS、Windows 上实现。
\ **注意:**\ 在导出的 Windows 构建中,要访问标准输入请运行控制台包装可执行文件。如果需要具有完整控制台支持的独立可执行文件,请使用带有 ``windows_subsystem=console`` 标志进行编译的自定义构建。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_stdout_type:
.. rst-class:: classref-method
:ref:`StdHandleType<enum_OS_StdHandleType>` **get_stdout_type**\ (\ ) |const| :ref:`🔗<class_OS_method_get_stdout_type>`
返回标准输出设备的类型。
\ **注意:**\ 该方法在 Linux、macOS、Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_system_ca_certificates:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_system_ca_certificates**\ (\ ) :ref:`🔗<class_OS_method_get_system_ca_certificates>`
返回操作系统信任的认证机构列表,是 PEM 格式的证书相连后的字符串。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_system_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_system_dir**\ (\ dir\: :ref:`SystemDir<enum_OS_SystemDir>`, shared_storage\: :ref:`bool<class_bool>` = true\ ) |const| :ref:`🔗<class_OS_method_get_system_dir>`
返回不同平台上常用文件夹的路径,如 ``dir`` 所定义。有关可用位置,请参阅 :ref:`SystemDir<enum_OS_SystemDir>` 常量。
\ **注意:**\ 这个方法在 Android、Linux、macOS 和 Windows 上实现。
\ **注意:**\ 共享存储在 Android 上实现,如果 ``shared_storage````true``\ ,则允许区分应用程序特定目录和共享目录。共享目录在 Android 上有额外的限制。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_system_font_path:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_system_font_path**\ (\ font_name\: :ref:`String<class_String>`, weight\: :ref:`int<class_int>` = 400, stretch\: :ref:`int<class_int>` = 100, italic\: :ref:`bool<class_bool>` = false\ ) |const| :ref:`🔗<class_OS_method_get_system_font_path>`
返回带有 ``font_name`` 和样式的系统字体文件的路径。如果未找到匹配的字体,则返回空字符串。
下列别名可用于请求默认字体无衬线“sans-serif”、有衬线“serif”、等宽“monospace”、手写体“cursive”、花体“fantasy”。
\ **注意:**\ 如果请求的样式不可用,则返回的字体可能具有不同的样式。
\ **注意:**\ 该方法在 Android、iOS、Linux、macOS、Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_system_font_path_for_text:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_system_font_path_for_text**\ (\ font_name\: :ref:`String<class_String>`, text\: :ref:`String<class_String>`, locale\: :ref:`String<class_String>` = "", script\: :ref:`String<class_String>` = "", weight\: :ref:`int<class_int>` = 400, stretch\: :ref:`int<class_int>` = 100, italic\: :ref:`bool<class_bool>` = false\ ) |const| :ref:`🔗<class_OS_method_get_system_font_path_for_text>`
返回系统替换字体文件路径的数组,这些字体与名称为 ``font_name`` 并且其他风格也相符的字体相近,可用于指定的文本、区域设置以及文字。如果没有相匹配的字体,则返回空数组。
下列别名可用于请求默认字体无衬线“sans-serif”、有衬线“serif”、等宽“monospace”、手写体“cursive”、花体“fantasy”。
\ **注意:**\ 根据操作系统的不同,无法保证任何返回的字体都适合渲染指定的文本。应该按照返回的顺序加载并检查字体,选用第一个合适的字体。
\ **注意:**\ 如果没有请求的风格,或者属于不同的字体家族,则可能返回不同风格的字体。
\ **注意:**\ 该方法在 Android、iOS、Linux、macOS、Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_system_fonts:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_system_fonts**\ (\ ) |const| :ref:`🔗<class_OS_method_get_system_fonts>`
返回可用的字体家族名称列表。
\ **注意:**\ 该方法在 Android、iOS、Linux、macOS、Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_temp_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_temp_dir**\ (\ ) |const| :ref:`🔗<class_OS_method_get_temp_dir>`
返回\ *全局*\ 临时数据目录,遵循操作系统标准。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_thread_caller_id:
.. rst-class:: classref-method
:ref:`int<class_int>` **get_thread_caller_id**\ (\ ) |const| :ref:`🔗<class_OS_method_get_thread_caller_id>`
返回当前线程的 ID。这可用于日志以简化多线程应用程序的调试。
\ **注意:**\ 线程 ID 不是确定的,也许会在应用程序重新启动时被重复使用。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_unique_id:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_unique_id**\ (\ ) |const| :ref:`🔗<class_OS_method_get_unique_id>`
返回特定于该设备的一个字符串。
\ **注意:**\ 如果用户重新安装操作系统、升级操作系统或修改硬件,则该字符串可能会更改,恕不另行通知。这意味着它通常不应用于加密持久数据,因为在意外的 ID 更改会使之前保存的数据变得无法访问。返回的字符串也可能会被外部程序伪造,因此出于安全目的,请勿依赖该方法返回的字符串。
\ **注意:**\ 在 Web 上,返回空字符串并生成错误,因为出于安全考虑无法实现该方法。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_user_data_dir:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_user_data_dir**\ (\ ) |const| :ref:`🔗<class_OS_method_get_user_data_dir>`
返回写入用户数据的绝对目录路径Godot 中的 ``user://`` 目录)。该路径取决于项目名称和 :ref:`ProjectSettings.application/config/use_custom_user_dir<class_ProjectSettings_property_application/config/use_custom_user_dir>`\ 。
- 在 Windows 上,这是 ``%AppData%\Godot\app_userdata\[project_name]``\ ;如果已设置 ``use_custom_user_dir``\ ,则为 ``%AppData%\[custom_name]``\ 。\ ``%AppData%`` 扩展为 ``%UserProfile%\AppData\Roaming``\ 。
- 在 macOS 上,这是 ``~/Library/Application Support/Godot/app_userdata/[project_name]``\ ;如果已设置 ``use_custom_user_dir``\ ,则为 ``~/Library/Application Support/[custom_name]``
- 在 Linux 和 BSD 上,这是 ``~/.local/share/godot/app_userdata/[project_name]``\ ;如果已设置 ``use_custom_user_dir``\ ,则为 ``~/.local/share/[custom_name]``\ 。
- 在 Android 和 iOS 上,这是内部存储或外部存储中的沙盒目录,具体取决于用户的配置。
- 在 Web 上,这是由浏览器管理的虚拟目录。
如果项目名称为空,则 ``[project_name]`` 将回退为 ``[unnamed project]``\ 。
请勿与 :ref:`get_data_dir()<class_OS_method_get_data_dir>` 混淆,后者返回的是\ *全局*\ (非项目特定的)用户主目录。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_version:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_version**\ (\ ) |const| :ref:`🔗<class_OS_method_get_version>`
返回操作系统的确切生产和构建版本。这与营销中使用的品牌版本不同。这有助于区分操作系统的不同版本,包括次要版本、内部版本和自定义版本。
- 对于 Windows返回主要和次要版本以及构建号。例如对于 Windows 10 版本,返回的字符串可能看起来像 ``10.0.9926``\ 。
- 对于滚动发行版,例如 Arch Linux会返回一个空字符串。
- 对于 macOS 和 iOS会返回主要和次要版本以及补丁号。
- 对于 Android会返回 SDK 版本和增量构建号。如果是自定义的 ROM将会尝试返回其版本。
\ **注意:**\ 该方法在 web 平台上不被支持。它将返回一个空字符串。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_version_alias:
.. rst-class:: classref-method
:ref:`String<class_String>` **get_version_alias**\ (\ ) |const| :ref:`🔗<class_OS_method_get_version_alias>`
返回用于营销的品牌版本后接构建号Windows 上、版本号macOS 上)或 SDK 版本和小构建号Android 上)。例如 ``11 (build 22000)``\ 、\ ``Sequoia (15.0.0)``\ 、\ ``15 (SDK 35 build abc528-11988f)``\ 。
这个值可以附加到 :ref:`get_name()<class_OS_method_get_name>` 后面获取该操作系统完整、人类可读的操作系统名称和版本组合。“24H2”等 Windows 功能更新不包含在结果字符串中,但会识别 Windows Server例如 ``2025 (build 26100)`` 表示 Windows Server 2025
\ **注意:**\ 该方法仅在 Windows、macOS、Android 上支持。在其他操作系统上返回值与 :ref:`get_version()<class_OS_method_get_version>` 相同。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_get_video_adapter_driver_info:
.. rst-class:: classref-method
:ref:`PackedStringArray<class_PackedStringArray>` **get_video_adapter_driver_info**\ (\ ) |const| :ref:`🔗<class_OS_method_get_video_adapter_driver_info>`
返回用户当前激活的显卡的视频适配器驱动程序名称和版本,返回为一个 :ref:`PackedStringArray<class_PackedStringArray>`\ 。另见 :ref:`RenderingServer.get_video_adapter_api_version()<class_RenderingServer_method_get_video_adapter_api_version>`\ 。
第一个元素保存驱动程序的名称,如 ``nvidia``\ 、\ ``amdgpu`` 等。
第二个元素保存驱动程序的版本。例如 Linux/BSD 平台上的 ``nvidia`` 驱动程序,其版本格式为 ``510.85.02``\ 。对于 Windows其驱动程序的格式是 ``31.0.15.1659``\ 。
\ **注意:**\ 该方法仅在 Linux/BSD 和 Windows 上不以无头模式运行时才受支持。在其他平台上,它返回一个空数组。
\ **注意:**\ 会话中首次调用该方法时会比较慢,可能会花费好几秒,具体取决于操作系统和硬件。在主线程上调用时会阻塞,因此建议使用 :ref:`Thread<class_Thread>` 在独立线程中调用。这样引擎就可以一边收集信息一边运行了。不过 :ref:`get_video_adapter_driver_info()<class_OS_method_get_video_adapter_driver_info>` *不是*\ 线程安全的,因此不应该在同一时间使用多个线程调用。
.. tabs::
.. code-tab:: gdscript
var thread = Thread.new()
func _ready():
thread.start(
func():
var driver_info = OS.get_video_adapter_driver_info()
if not driver_info.is_empty():
print("驱动: %s %s" % [driver_info[0], driver_info[1]])
else:
print("驱动:(未知)")
)
func _exit_tree():
thread.wait_to_finish()
.. rst-class:: classref-item-separator
----
.. _class_OS_method_has_environment:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **has_environment**\ (\ variable\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_has_environment>`
如果名称为 ``variable`` 的环境变量存在,则返回 ``true``\ 。
\ **注意:**\ 请仔细检查 ``variable`` 的大小写。环境变量名称在除 Windows 之外的所有平台上都区分大小写。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_has_feature:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **has_feature**\ (\ tag_name\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_has_feature>`
如果当前运行的实例支持给定功能标签的功能,则返回 ``true``\ ,具体取决于平台、构建等。可用于检查当前是否正在运行调试构建,是否在某个平台或架构上,等等。详见\ :doc:`《功能标签》 <../tutorials/export/feature_tags>`\ 文档。
\ **注意:**\ 标签名称区分大小写。
\ **注意:**\ 在 Web 平台上,会定义 ``web_android``\ 、\ ``web_ios``\ 、\ ``web_linuxbsd``\ 、\ ``web_macos``\ 、\ ``web_windows`` 的其中之一,表示宿主平台。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_debug_build:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_debug_build**\ (\ ) |const| :ref:`🔗<class_OS_method_is_debug_build>`
如果用于运行项目的 Godot 二进制文件是\ *调试*\ 导出模板,或是在编辑器中运行时,则返回 ``true``\ 。
如果用于运行项目的 Godot 二进制文件是\ *发布*\ 导出模板,则返回 ``false``\ 。
\ **注意:**\ 要检查用于运行项目的 Godot 二进制文件是否是导出模板(调试或发布),请改用 ``OS.has_feature("template")``\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_keycode_unicode:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_keycode_unicode**\ (\ code\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OS_method_is_keycode_unicode>`
如果输入的键码对应 Unicode 字符,则返回 ``true``\ 。键码列表见 :ref:`Key<enum_@GlobalScope_Key>` 常量。
.. tabs::
.. code-tab:: gdscript
print(OS.is_keycode_unicode(KEY_G)) # 输出 true
print(OS.is_keycode_unicode(KEY_KP_4)) # 输出 true
print(OS.is_keycode_unicode(KEY_TAB)) # 输出 false
print(OS.is_keycode_unicode(KEY_ESCAPE)) # 输出 false
.. code-tab:: csharp
GD.Print(OS.IsKeycodeUnicode((long)Key.G)); // 输出 True
GD.Print(OS.IsKeycodeUnicode((long)Key.Kp4)); // 输出 True
GD.Print(OS.IsKeycodeUnicode((long)Key.Tab)); // 输出 False
GD.Print(OS.IsKeycodeUnicode((long)Key.Escape)); // 输出 False
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_process_running:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_process_running**\ (\ pid\: :ref:`int<class_int>`\ ) |const| :ref:`🔗<class_OS_method_is_process_running>`
如果该子进程 ID\ ``pid``\ )仍在运行,则返回 ``true``\ ;如果它已终止,则返回 ``false``\ 。\ ``pid`` 必须是从 :ref:`create_process()<class_OS_method_create_process>` 生成的有效 ID。
\ **注意:**\ 该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_restart_on_exit_set:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_restart_on_exit_set**\ (\ ) |const| :ref:`🔗<class_OS_method_is_restart_on_exit_set>`
如果项目因任何原因退出时将自动重新启动,则返回 ``true``\ ,否则返回 ``false``\ 。另见 :ref:`set_restart_on_exit()<class_OS_method_set_restart_on_exit>` 和 :ref:`get_restart_on_exit_arguments()<class_OS_method_get_restart_on_exit_arguments>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_sandboxed:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_sandboxed**\ (\ ) |const| :ref:`🔗<class_OS_method_is_sandboxed>`
如果该应用程序在沙箱中运行,则返回 ``true``\ 。
\ **注意:**\ 该方法仅在 macOS 和 Linux 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_stdout_verbose:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_stdout_verbose**\ (\ ) |const| :ref:`🔗<class_OS_method_is_stdout_verbose>`
如果引擎是使用 ``--verbose````-v`` 命令行参数执行的,或者如果 :ref:`ProjectSettings.debug/settings/stdout/verbose_stdout<class_ProjectSettings_property_debug/settings/stdout/verbose_stdout>```true``\ ,则返回 ``true``\ 。另见 :ref:`@GlobalScope.print_verbose()<class_@GlobalScope_method_print_verbose>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_is_userfs_persistent:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **is_userfs_persistent**\ (\ ) |const| :ref:`🔗<class_OS_method_is_userfs_persistent>`
如果 ``user://`` 文件系统是持久的,即玩家退出并再次开始游戏后其状态相同,则返回 ``true``\ 。与 Web 平台相关,这种持久性可能不可用。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_kill:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **kill**\ (\ pid\: :ref:`int<class_int>`\ ) :ref:`🔗<class_OS_method_kill>`
杀死(终止)由给定进程 ID\ ``pid``\ )标识的进程,例如由 :ref:`execute()<class_OS_method_execute>` 在非阻塞模式下返回的那个进程 ID。另见 :ref:`crash()<class_OS_method_crash>`\ 。
\ **注意:**\ 该方法也可用于杀死不是由引擎产生的进程。
\ **注意:**\ 该方法在 Android、iOS、Linux、macOS 和 Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_move_to_trash:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **move_to_trash**\ (\ path\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_move_to_trash>`
将给定 ``path`` 处的文件或目录移动到系统的回收站。另见 :ref:`DirAccess.remove()<class_DirAccess_method_remove>`\ 。
该方法仅支持全局路径,所以可能需要使用 :ref:`ProjectSettings.globalize_path()<class_ProjectSettings_method_globalize_path>`\ 。请勿将其用于 ``res://`` 中的文件,因为它在导出后的项目中是无法正常工作的。
如果找不到文件或目录,或者系统不支持该方法,则返回 :ref:`@GlobalScope.FAILED<class_@GlobalScope_constant_FAILED>`\ 。
.. tabs::
.. code-tab:: gdscript
var file_to_remove = "user://slot1.save"
OS.move_to_trash(ProjectSettings.globalize_path(file_to_remove))
.. code-tab:: csharp
var fileToRemove = "user://slot1.save";
OS.MoveToTrash(ProjectSettings.GlobalizePath(fileToRemove));
\ **注意:**\ 该方法在 Android、Linux、macOS 和 Windows 上实现。
\ **注意:**\ 如果用户在其系统上禁用了回收站,则该文件将被永久删除。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_open_midi_inputs:
.. rst-class:: classref-method
|void| **open_midi_inputs**\ (\ ) :ref:`🔗<class_OS_method_open_midi_inputs>`
初始化系统 MIDI 驱动的单例,允许 Godot 接收 :ref:`InputEventMIDI<class_InputEventMIDI>`\ 。另见 :ref:`get_connected_midi_inputs()<class_OS_method_get_connected_midi_inputs>`:ref:`close_midi_inputs()<class_OS_method_close_midi_inputs>`\ 。
\ **注意:**\ 该方法在 Linux、macOS、Windows、Web 上实现。
\ **注意:**\ 在 Web 平台上,浏览器需要支持 Web MIDI。\ `目前 <https://caniuse.com/midi>`__\ 主流浏览器中除了 Safari 都支持。
\ **注意:**\ 在 Web 平台上,需要在浏览器中授权才能使用 MIDI 输入。权限请求会在调用 :ref:`open_midi_inputs()<class_OS_method_open_midi_inputs>` 时进行。用户接受权限请求后浏览器才会处理 MIDI 输入。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_open_with_program:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **open_with_program**\ (\ program_path\: :ref:`String<class_String>`, paths\: :ref:`PackedStringArray<class_PackedStringArray>`\ ) :ref:`🔗<class_OS_method_open_with_program>`
使用指定的应用程序打开一个或多个文件/目录。\ ``program_path`` 指定的是用来打开文件的应用程序路径,\ ``paths`` 中包含的是要打开的文件/目录的数组。
\ **注意:**\ 大多数情况下只有 macOS 上使用 :ref:`create_process()<class_OS_method_create_process>` 可能失败才需要使用该函数。其他平台会使用 :ref:`create_process()<class_OS_method_create_process>` 作为回退实现。
\ **注意:**\ 在 macOS 上,理想情况下 ``program_path`` 应该是 ``.app`` 捆绑包的路径。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_read_buffer_from_stdin:
.. rst-class:: classref-method
:ref:`PackedByteArray<class_PackedByteArray>` **read_buffer_from_stdin**\ (\ buffer_size\: :ref:`int<class_int>` = 1024\ ) :ref:`🔗<class_OS_method_read_buffer_from_stdin>`
从标准输入读取用户输入的原始数据字符串。这个操作是\ *阻塞的* ,如果在主线程上调用 :ref:`read_buffer_from_stdin()<class_OS_method_read_buffer_from_stdin>` 就会导致窗口冻结。
- 如果标准输入为控制台,则该方法会阻塞到程序在标准输入中接收到换行(通常是用户按下了 :kbd:`Enter`\ )。
- 如果标准输入为管道,则该方法会阻塞到读取指定数量的数据或管道关闭。
- 如果标准输入为文件,则该方法会读取指定数量的数据(到达文件末尾时则不足指定数量)并立即返回。
\ **注意:**\ 该方法在 Linux、macOS 和 Windows 上实现。
\ **注意:**\ 在导出的 Windows 版本中,运行控制台包装器可执行文件来访问终端。如果标准输入为控制台,那么不通过控制台包装器运行就会导致卡死。如果标准输入为管道或文件,那么就可以不借助控制台包装器直接使用。如果你需要具有控制台支持的单个可执行文件,请使用启用 ``windows_subsystem=console`` 标志编译的自定义构建。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_read_string_from_stdin:
.. rst-class:: classref-method
:ref:`String<class_String>` **read_string_from_stdin**\ (\ buffer_size\: :ref:`int<class_int>` = 1024\ ) :ref:`🔗<class_OS_method_read_string_from_stdin>`
从标准输入读取用户输入。这个操作可能导致\ *阻塞* ,如果是在主线程上调用的 :ref:`read_string_from_stdin()<class_OS_method_read_string_from_stdin>`\ ,就会导致窗口冻结。
- 如果标准输入是控制台,则该方法会阻塞到程序在标准输入中接收到一个断行为止(通常由用户按下 :kbd:`Enter` 触发)。
- 如果标准输入是管道,则该方法会阻塞至读取指定量的数据或管道断开为止。
- 如果标准输入是文件,则该方法会读取指定量的数据(到达文件末尾时会则更少)并立即返回。
\ **注意:**\ 该方法会自动将 ``\r\n`` 换行替换为 ``\n`` 并移除字符串末尾的换行。读取未经处理的数据请使用 :ref:`read_buffer_from_stdin()<class_OS_method_read_buffer_from_stdin>`\ 。
\ **注意:**\ 该方法在 Linux、macOS 和 Windows 上实现。
\ **注意:**\ 使用导出的 Windows 版本时,如需访问终端,请运行控制台包装器可执行文件。如果标准输入为控制台,不使用控制台包装器运行时调用该方法会导致卡死。如果标准输入为管道或文件,则可以不使用控制台包装器。如果你需要具有控制台支持的单个可执行文件,请使用启用 ``windows_subsystem=console`` 标志编译的自定义构建。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_remove_logger:
.. rst-class:: classref-method
|void| **remove_logger**\ (\ logger\: :ref:`Logger<class_Logger>`\ ) :ref:`🔗<class_OS_method_remove_logger>`
移除由 :ref:`add_logger()<class_OS_method_add_logger>` 添加的自定义日志记录器。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_request_permission:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **request_permission**\ (\ name\: :ref:`String<class_String>`\ ) :ref:`🔗<class_OS_method_request_permission>`
向操作系统请求名为 ``name`` 的权限。如果已授权则返回 ``true``\ 。另见 :ref:`MainLoop.on_request_permissions_result<class_MainLoop_signal_on_request_permissions_result>`\ 。
\ ``name`` 必须是权限的全名。例如:
- ``OS.request_permission("android.permission.READ_EXTERNAL_STORAGE")``\
- ``OS.request_permission("android.permission.POST_NOTIFICATIONS")``\
- ``OS.request_permission("macos.permission.RECORD_SCREEN")``\
- ``OS.request_permission("appleembedded.permission.AUDIO_RECORD")``\
\ **注意:**\ 在 Android 上,导出时必须设置权限。
\ **注意:**\ 该方法在 Android、macOS、visionOS 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_request_permissions:
.. rst-class:: classref-method
:ref:`bool<class_bool>` **request_permissions**\ (\ ) :ref:`🔗<class_OS_method_request_permissions>`
向操作系统请求\ *危险*\ 权限。如果已授权则返回 ``true``\ 。另见 :ref:`MainLoop.on_request_permissions_result<class_MainLoop_signal_on_request_permissions_result>`\ 。
\ **注意:**\ 导出时必须检查权限。
\ **注意:**\ 该方法仅在 Android 上实现。安装 Android 应用时会自动授予普通权限。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_revoke_granted_permissions:
.. rst-class:: classref-method
|void| **revoke_granted_permissions**\ (\ ) :ref:`🔗<class_OS_method_revoke_granted_permissions>`
在 macOS仅限沙盒应用程序该功能会清除应用程序可访问的用户选择的文件夹列表。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_set_environment:
.. rst-class:: classref-method
|void| **set_environment**\ (\ variable\: :ref:`String<class_String>`, value\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_set_environment>`
将环境变量 ``variable`` 的值设置为 ``value``\ 。运行 :ref:`set_environment()<class_OS_method_set_environment>` 后,会为 Godot 进程和任何用 :ref:`execute()<class_OS_method_execute>` 执行的进程设置该环境变量。该环境变量\ *不会*\ 持续存在于 Godot 进程终止后运行的进程中。
\ **注意:**\ 环境变量的名称在除 Windows 外的所有平台上都是区分大小写的。名称 ``variable`` 不能为空,也不能包含 ``=`` 字符。在 Windows 上,在环境块中注册的 ``variable``\ 、\ ``value``\ 、\ ``=`` 以及 null 终止符的总长度有 32767 个字符的限制。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_set_restart_on_exit:
.. rst-class:: classref-method
|void| **set_restart_on_exit**\ (\ restart\: :ref:`bool<class_bool>`, arguments\: :ref:`PackedStringArray<class_PackedStringArray>` = PackedStringArray()\ ) :ref:`🔗<class_OS_method_set_restart_on_exit>`
如果 ``restart````true``\ ,则项目在使用 :ref:`SceneTree.quit()<class_SceneTree_method_quit>` 或 :ref:`Node.NOTIFICATION_WM_CLOSE_REQUEST<class_Node_constant_NOTIFICATION_WM_CLOSE_REQUEST>` 退出时,会自动重新启动。可以提供命令行 ``arguments``\ 。要使用最初用于运行项目的命令行参数重新启动项目,请将 :ref:`get_cmdline_args()<class_OS_method_get_cmdline_args>` 作为 ``arguments`` 的值传递。
该方法可用于应用需要重新启动的设置更改。另见 :ref:`is_restart_on_exit_set()<class_OS_method_is_restart_on_exit_set>`:ref:`get_restart_on_exit_arguments()<class_OS_method_get_restart_on_exit_arguments>`\ 。
\ **注意:**\ 该方法只在桌面平台上有效,并且只在项目不是从编辑器启动时有效。不会影响移动和 Web 平台,或者当项目从编辑器启动时。
\ **注意:**\ 如果项目进程崩溃或被用户\ *杀死*\ (通过发送 ``SIGKILL`` 而不是通常的 ``SIGTERM``\ ),项目不会自动重新启动。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_set_thread_name:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **set_thread_name**\ (\ name\: :ref:`String<class_String>`\ ) :ref:`🔗<class_OS_method_set_thread_name>`
为当前线程分配指定的名称。如果在当前平台不可使用,则返回 :ref:`@GlobalScope.ERR_UNAVAILABLE<class_@GlobalScope_constant_ERR_UNAVAILABLE>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_set_use_file_access_save_and_swap:
.. rst-class:: classref-method
|void| **set_use_file_access_save_and_swap**\ (\ enabled\: :ref:`bool<class_bool>`\ ) :ref:`🔗<class_OS_method_set_use_file_access_save_and_swap>`
如果 ``enabled````true``\ ,那么在以写模式打开文件时,会使用在同一位置打开的临时文件。关闭时会自动将其应用至目标文件。
适用于文件可能被杀毒软件、文本编辑器、甚至 Godot 编辑器自己等其他程序打开的场景。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_shell_open:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **shell_open**\ (\ uri\: :ref:`String<class_String>`\ ) :ref:`🔗<class_OS_method_shell_open>`
请求操作系统使用最合适的程序打开由 ``uri`` 标识的资源。例如:
- ``OS.shell_open("C:\\Users\\name\\Downloads")`` 在 Windows 上会用资源管理器打开用户的 Downloads 文件夹。
- ``OS.shell_open("C:/Users/name/Downloads")`` 在 Windows 也会用资源管理器打开用户的 Downloads 文件夹。
- ``OS.shell_open("https://godotengine.org")`` 会使用默认网页浏览器打开 Godot 官方网站。
- ``OS.shell_open("mailto:example@example.com")`` 会打开默认电子邮件客户端并将“收件人”字段设置为 ``example@example.com``\ 。其他支持自定义的字段见 `RFC 2368 - [code]mailto[/code] URL 方案 <https://datatracker.ietf.org/doc/html/rfc2368>`__\ 。
可以使用 :ref:`ProjectSettings.globalize_path()<class_ProjectSettings_method_globalize_path>```res://````user://`` 项目路径转换为系统路径,以便与该方法一起使用。
\ **注意:**\ 请使用 :ref:`String.uri_encode()<class_String_method_uri_encode>` 对 URL 中的字符进行编码,得到的 URL 才能安全使用、可移植。尤其是在包含换行的情况下。否则项目导出至 Web 平台后 :ref:`shell_open()<class_OS_method_shell_open>` 可能无法正常工作。
\ **注意:**\ 这个方法在 Android、iOS、Web、Linux、macOS 以及 Windows 上实现。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_shell_show_in_file_manager:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **shell_show_in_file_manager**\ (\ file_or_dir_path\: :ref:`String<class_String>`, open_folder\: :ref:`bool<class_bool>` = true\ ) :ref:`🔗<class_OS_method_shell_show_in_file_manager>`
请求操作系统打开文件管理器,导航至给定的文件或目录路径 ``file_or_dir_path`` 并选中目标文件或文件夹。
如果 ``open_folder````true`` 并且 ``file_or_dir_path`` 是有效的目录路径,则操作系统将打开文件管理器并导航到目标文件夹,而不选择任何内容。
请使用 :ref:`ProjectSettings.globalize_path()<class_ProjectSettings_method_globalize_path>```res://````user://`` 项目路径转换为系统路径以与该方法一起使用。
\ **注意:**\ 目前该方法仅在 Windows 和 macOS 上实现。在其他平台上,它会回退至使用前缀为 ``file://````file_or_dir_path`` 目录路径调用 :ref:`shell_open()<class_OS_method_shell_open>`\ 。
.. rst-class:: classref-item-separator
----
.. _class_OS_method_unset_environment:
.. rst-class:: classref-method
|void| **unset_environment**\ (\ variable\: :ref:`String<class_String>`\ ) |const| :ref:`🔗<class_OS_method_unset_environment>`
如果给定的环境变量存在,则从当前环境中移除。\ ``variable`` 名称不能为空或包含 ``=`` 字符。在运行 :ref:`unset_environment()<class_OS_method_unset_environment>` 后,将为 Godot 进程和使用 :ref:`execute()<class_OS_method_execute>` 执行的任何进程移除环境变量。环境变量的移除并\ *不会*\ 持续到 Godot 进程终止后运行的进程。
\ **注意:**\ 环境变量名称在除 Windows 以外的所有平台上都区分大小写。
.. |virtual| replace:: :abbr:`virtual (本方法通常需要用户覆盖才能生效。)`
.. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)`
.. |const| replace:: :abbr:`const (本方法无副作用,不会修改该实例的任何成员变量。)`
.. |vararg| replace:: :abbr:`vararg (本方法除了能接受在此处描述的参数外,还能够继续接受任意数量的参数。)`
.. |constructor| replace:: :abbr:`constructor (本方法用于构造某个类型。)`
.. |static| replace:: :abbr:`static (调用本方法无需实例,可直接使用类名进行调用。)`
.. |operator| replace:: :abbr:`operator (本方法描述的是使用本类型作为左操作数的有效运算符。)`
.. |bitfield| replace:: :abbr:`BitField (这个值是由下列位标志构成位掩码的整数。)`
.. |void| replace:: :abbr:`void (无返回值。)`