We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[BUG] Conan Tools does not export detected_os
To help us debug your issue please explain:

When I was updating cmake_installer, I just found that `detected_os` is not exported by conans.tools

Conan Version 1.15.0

```python
from conans import tools

if __name__ == "__main__":
	tools.detected_os()
```

**ERROR**: 
```
Traceback (most recent call last):
  File "conanfile.py", line 4, in <module>
    tools.detected_os()
AttributeError: module 'conans.tools' has no attribute 'detected_os'
```

- [X] I've read the [CONTRIBUTING guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).
- [X] I've specified the Conan version, operating system version and any tool that can be relevant.
- [X] I've explained the steps to reproduce the error or the motivation/use case of the question/suggestion.



--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `conans/tools.py`
Content:
```
1 """
2     Conan tools: classes and function in this module are intended to be used out of the box
3     with the Conan configuration already currified into them. This configuration refers
4     mainly to two items:
5      - requester: on network calls, this will include proxy definition.
6      - output: the output configuration
7 
8     Here in this module there should be no logic, all functions and classes must be implemented
9     elsewhere (mainly in conans.util or conans.client.tools) and ready to be used without
10     the currification.
11 """
12 
13 import requests
14 
15 from conans.client.output import ConanOutput
16 # Tools from conans.client.tools
17 from conans.client.tools import files as tools_files, net as tools_net, oss as tools_oss, \
18     system_pm as tools_system_pm, win as tools_win
19 from conans.client.tools.env import *  # pylint: disable=unused-import
20 from conans.client.tools.pkg_config import *  # pylint: disable=unused-import
21 from conans.client.tools.scm import *  # pylint: disable=unused-import
22 from conans.client.tools.apple import *
23 # Tools form conans.util
24 from conans.util.env_reader import get_env
25 from conans.util.files import _generic_algorithm_sum, load, md5, md5sum, mkdir, relative_dirs, \
26     rmdir, save as files_save, save_append, sha1sum, sha256sum, touch, sha1sum, sha256sum, \
27     to_file_bytes, touch
28 from conans.util.log import logger
29 from conans.client.tools.version import Version
30 
31 
32 # This global variables are intended to store the configuration of the running Conan application
33 _global_output = None
34 _global_requester = None
35 
36 
37 def set_global_instances(the_output, the_requester):
38     global _global_output
39     global _global_requester
40 
41     old_output, old_requester = _global_output, _global_requester
42 
43     # TODO: pass here the configuration file, and make the work here (explicit!)
44     _global_output = the_output
45     _global_requester = the_requester
46 
47     return old_output, old_requester
48 
49 
50 def get_global_instances():
51     return _global_output, _global_requester
52 
53 
54 # Assign a default, will be overwritten in the factory of the ConanAPI
55 set_global_instances(the_output=ConanOutput(sys.stdout, True), the_requester=requests)
56 
57 
58 """
59 From here onwards only currification is expected, no logic
60 """
61 
62 
63 def save(path, content, append=False):
64     # TODO: All this three functions: save, save_append and this one should be merged into one.
65     if append:
66         save_append(path=path, content=content)
67     else:
68         files_save(path=path, content=content, only_if_modified=False)
69 
70 
71 # From conans.client.tools.net
72 ftp_download = tools_net.ftp_download
73 
74 
75 def download(*args, **kwargs):
76     return tools_net.download(out=_global_output, requester=_global_requester, *args, **kwargs)
77 
78 
79 def get(*args, **kwargs):
80     return tools_net.get(output=_global_output, requester=_global_requester, *args, **kwargs)
81 
82 
83 # from conans.client.tools.files
84 chdir = tools_files.chdir
85 human_size = tools_files.human_size
86 untargz = tools_files.untargz
87 check_with_algorithm_sum = tools_files.check_with_algorithm_sum
88 check_sha1 = tools_files.check_sha1
89 check_md5 = tools_files.check_md5
90 check_sha256 = tools_files.check_sha256
91 patch = tools_files.patch
92 replace_prefix_in_pc_file = tools_files.replace_prefix_in_pc_file
93 collect_libs = tools_files.collect_libs
94 which = tools_files.which
95 unix2dos = tools_files.unix2dos
96 dos2unix = tools_files.dos2unix
97 
98 
99 def unzip(*args, **kwargs):
100     return tools_files.unzip(output=_global_output, *args, **kwargs)
101 
102 
103 def replace_in_file(*args, **kwargs):
104     return tools_files.replace_in_file(output=_global_output, *args, **kwargs)
105 
106 
107 def replace_path_in_file(*args, **kwargs):
108     return tools_files.replace_path_in_file(output=_global_output, *args, **kwargs)
109 
110 
111 # from conans.client.tools.oss
112 args_to_string = tools_oss.args_to_string
113 detected_architecture = tools_oss.detected_architecture
114 OSInfo = tools_oss.OSInfo
115 cross_building = tools_oss.cross_building
116 get_cross_building_settings = tools_oss.get_cross_building_settings
117 get_gnu_triplet = tools_oss.get_gnu_triplet
118 
119 
120 def cpu_count(*args, **kwargs):
121     return tools_oss.cpu_count(output=_global_output, *args, **kwargs)
122 
123 
124 # from conans.client.tools.system_pm
125 class SystemPackageTool(tools_system_pm.SystemPackageTool):
126     def __init__(self, *args, **kwargs):
127         super(SystemPackageTool, self).__init__(output=_global_output, *args, **kwargs)
128 
129 
130 class NullTool(tools_system_pm.NullTool):
131     def __init__(self, *args, **kwargs):
132         super(NullTool, self).__init__(output=_global_output, *args, **kwargs)
133 
134 
135 class AptTool(tools_system_pm.AptTool):
136     def __init__(self, *args, **kwargs):
137         super(AptTool, self).__init__(output=_global_output, *args, **kwargs)
138 
139 
140 class YumTool(tools_system_pm.YumTool):
141     def __init__(self, *args, **kwargs):
142         super(YumTool, self).__init__(output=_global_output, *args, **kwargs)
143 
144 
145 class BrewTool(tools_system_pm.BrewTool):
146     def __init__(self, *args, **kwargs):
147         super(BrewTool, self).__init__(output=_global_output, *args, **kwargs)
148 
149 
150 class PkgTool(tools_system_pm.PkgTool):
151     def __init__(self, *args, **kwargs):
152         super(PkgTool, self).__init__(output=_global_output, *args, **kwargs)
153 
154 
155 class ChocolateyTool(tools_system_pm.ChocolateyTool):
156     def __init__(self, *args, **kwargs):
157         super(ChocolateyTool, self).__init__(output=_global_output, *args, **kwargs)
158 
159 
160 class PkgUtilTool(tools_system_pm.PkgUtilTool):
161     def __init__(self, *args, **kwargs):
162         super(PkgUtilTool, self).__init__(output=_global_output, *args, **kwargs)
163 
164 
165 class PacManTool(tools_system_pm.PacManTool):
166     def __init__(self, *args, **kwargs):
167         super(PacManTool, self).__init__(output=_global_output, *args, **kwargs)
168 
169 
170 class ZypperTool(tools_system_pm.ZypperTool):
171     def __init__(self, *args, **kwargs):
172         super(ZypperTool, self).__init__(output=_global_output, *args, **kwargs)
173 
174 
175 # from conans.client.tools.win
176 vs_installation_path = tools_win.vs_installation_path
177 vswhere = tools_win.vswhere
178 vs_comntools = tools_win.vs_comntools
179 find_windows_10_sdk = tools_win.find_windows_10_sdk
180 escape_windows_cmd = tools_win.escape_windows_cmd
181 get_cased_path = tools_win.get_cased_path
182 MSYS2 = tools_win.MSYS2
183 MSYS = tools_win.MSYS
184 CYGWIN = tools_win.CYGWIN
185 WSL = tools_win.WSL
186 SFU = tools_win.SFU
187 unix_path = tools_win.unix_path
188 run_in_windows_bash = tools_win.run_in_windows_bash
189 
190 
191 @contextmanager
192 def vcvars(*args, **kwargs):
193     with tools_win.vcvars(output=_global_output, *args, **kwargs):
194         yield
195 
196 
197 def msvc_build_command(*args, **kwargs):
198     return tools_win.msvc_build_command(output=_global_output, *args, **kwargs)
199 
200 
201 def build_sln_command(*args, **kwargs):
202     return tools_win.build_sln_command(output=_global_output, *args, **kwargs)
203 
204 
205 def vcvars_command(*args, **kwargs):
206     return tools_win.vcvars_command(output=_global_output, *args, **kwargs)
207 
208 
209 def vcvars_dict(*args, **kwargs):
210     return tools_win.vcvars_dict(output=_global_output, *args, **kwargs)
211 
212 
213 def latest_vs_version_installed(*args, **kwargs):
214     return tools_win.latest_vs_version_installed(output=_global_output, *args, **kwargs)
215 
216 
217 # Ready to use objects.
218 try:
219     os_info = OSInfo()
220 except Exception as exc:
221     logger.error(exc)
222     _global_output.error("Error detecting os_info")
223
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/conans/tools.py b/conans/tools.py
--- a/conans/tools.py
+++ b/conans/tools.py
@@ -111,6 +111,7 @@
 # from conans.client.tools.oss
 args_to_string = tools_oss.args_to_string
 detected_architecture = tools_oss.detected_architecture
+detected_os = tools_oss.detected_os
 OSInfo = tools_oss.OSInfo
 cross_building = tools_oss.cross_building
 get_cross_building_settings = tools_oss.get_cross_building_settings

{"golden_diff": "diff --git a/conans/tools.py b/conans/tools.py\n--- a/conans/tools.py\n+++ b/conans/tools.py\n@@ -111,6 +111,7 @@\n # from conans.client.tools.oss\n args_to_string = tools_oss.args_to_string\n detected_architecture = tools_oss.detected_architecture\n+detected_os = tools_oss.detected_os\n OSInfo = tools_oss.OSInfo\n cross_building = tools_oss.cross_building\n get_cross_building_settings = tools_oss.get_cross_building_settings\n", "issue": "[BUG] Conan Tools does not export detected_os\nTo help us debug your issue please explain:\r\n\r\nWhen I was updating cmake_installer, I just found that `detected_os` is not exported by conans.tools\r\n\r\nConan Version 1.15.0\r\n\r\n```python\r\nfrom conans import tools\r\n\r\nif __name__ == \"__main__\":\r\n\ttools.detected_os()\r\n```\r\n\r\n**ERROR**: \r\n```\r\nTraceback (most recent call last):\r\n  File \"conanfile.py\", line 4, in <module>\r\n    tools.detected_os()\r\nAttributeError: module 'conans.tools' has no attribute 'detected_os'\r\n```\r\n\r\n- [X] I've read the [CONTRIBUTING guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).\r\n- [X] I've specified the Conan version, operating system version and any tool that can be relevant.\r\n- [X] I've explained the steps to reproduce the error or the motivation/use case of the question/suggestion.\r\n\r\n\n", "before_files": [{"content": "\"\"\"\n    Conan tools: classes and function in this module are intended to be used out of the box\n    with the Conan configuration already currified into them. This configuration refers\n    mainly to two items:\n     - requester: on network calls, this will include proxy definition.\n     - output: the output configuration\n\n    Here in this module there should be no logic, all functions and classes must be implemented\n    elsewhere (mainly in conans.util or conans.client.tools) and ready to be used without\n    the currification.\n\"\"\"\n\nimport requests\n\nfrom conans.client.output import ConanOutput\n# Tools from conans.client.tools\nfrom conans.client.tools import files as tools_files, net as tools_net, oss as tools_oss, \\\n    system_pm as tools_system_pm, win as tools_win\nfrom conans.client.tools.env import *  # pylint: disable=unused-import\nfrom conans.client.tools.pkg_config import *  # pylint: disable=unused-import\nfrom conans.client.tools.scm import *  # pylint: disable=unused-import\nfrom conans.client.tools.apple import *\n# Tools form conans.util\nfrom conans.util.env_reader import get_env\nfrom conans.util.files import _generic_algorithm_sum, load, md5, md5sum, mkdir, relative_dirs, \\\n    rmdir, save as files_save, save_append, sha1sum, sha256sum, touch, sha1sum, sha256sum, \\\n    to_file_bytes, touch\nfrom conans.util.log import logger\nfrom conans.client.tools.version import Version\n\n\n# This global variables are intended to store the configuration of the running Conan application\n_global_output = None\n_global_requester = None\n\n\ndef set_global_instances(the_output, the_requester):\n    global _global_output\n    global _global_requester\n\n    old_output, old_requester = _global_output, _global_requester\n\n    # TODO: pass here the configuration file, and make the work here (explicit!)\n    _global_output = the_output\n    _global_requester = the_requester\n\n    return old_output, old_requester\n\n\ndef get_global_instances():\n    return _global_output, _global_requester\n\n\n# Assign a default, will be overwritten in the factory of the ConanAPI\nset_global_instances(the_output=ConanOutput(sys.stdout, True), the_requester=requests)\n\n\n\"\"\"\nFrom here onwards only currification is expected, no logic\n\"\"\"\n\n\ndef save(path, content, append=False):\n    # TODO: All this three functions: save, save_append and this one should be merged into one.\n    if append:\n        save_append(path=path, content=content)\n    else:\n        files_save(path=path, content=content, only_if_modified=False)\n\n\n# From conans.client.tools.net\nftp_download = tools_net.ftp_download\n\n\ndef download(*args, **kwargs):\n    return tools_net.download(out=_global_output, requester=_global_requester, *args, **kwargs)\n\n\ndef get(*args, **kwargs):\n    return tools_net.get(output=_global_output, requester=_global_requester, *args, **kwargs)\n\n\n# from conans.client.tools.files\nchdir = tools_files.chdir\nhuman_size = tools_files.human_size\nuntargz = tools_files.untargz\ncheck_with_algorithm_sum = tools_files.check_with_algorithm_sum\ncheck_sha1 = tools_files.check_sha1\ncheck_md5 = tools_files.check_md5\ncheck_sha256 = tools_files.check_sha256\npatch = tools_files.patch\nreplace_prefix_in_pc_file = tools_files.replace_prefix_in_pc_file\ncollect_libs = tools_files.collect_libs\nwhich = tools_files.which\nunix2dos = tools_files.unix2dos\ndos2unix = tools_files.dos2unix\n\n\ndef unzip(*args, **kwargs):\n    return tools_files.unzip(output=_global_output, *args, **kwargs)\n\n\ndef replace_in_file(*args, **kwargs):\n    return tools_files.replace_in_file(output=_global_output, *args, **kwargs)\n\n\ndef replace_path_in_file(*args, **kwargs):\n    return tools_files.replace_path_in_file(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.oss\nargs_to_string = tools_oss.args_to_string\ndetected_architecture = tools_oss.detected_architecture\nOSInfo = tools_oss.OSInfo\ncross_building = tools_oss.cross_building\nget_cross_building_settings = tools_oss.get_cross_building_settings\nget_gnu_triplet = tools_oss.get_gnu_triplet\n\n\ndef cpu_count(*args, **kwargs):\n    return tools_oss.cpu_count(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.system_pm\nclass SystemPackageTool(tools_system_pm.SystemPackageTool):\n    def __init__(self, *args, **kwargs):\n        super(SystemPackageTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass NullTool(tools_system_pm.NullTool):\n    def __init__(self, *args, **kwargs):\n        super(NullTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass AptTool(tools_system_pm.AptTool):\n    def __init__(self, *args, **kwargs):\n        super(AptTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass YumTool(tools_system_pm.YumTool):\n    def __init__(self, *args, **kwargs):\n        super(YumTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass BrewTool(tools_system_pm.BrewTool):\n    def __init__(self, *args, **kwargs):\n        super(BrewTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PkgTool(tools_system_pm.PkgTool):\n    def __init__(self, *args, **kwargs):\n        super(PkgTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass ChocolateyTool(tools_system_pm.ChocolateyTool):\n    def __init__(self, *args, **kwargs):\n        super(ChocolateyTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PkgUtilTool(tools_system_pm.PkgUtilTool):\n    def __init__(self, *args, **kwargs):\n        super(PkgUtilTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PacManTool(tools_system_pm.PacManTool):\n    def __init__(self, *args, **kwargs):\n        super(PacManTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass ZypperTool(tools_system_pm.ZypperTool):\n    def __init__(self, *args, **kwargs):\n        super(ZypperTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.win\nvs_installation_path = tools_win.vs_installation_path\nvswhere = tools_win.vswhere\nvs_comntools = tools_win.vs_comntools\nfind_windows_10_sdk = tools_win.find_windows_10_sdk\nescape_windows_cmd = tools_win.escape_windows_cmd\nget_cased_path = tools_win.get_cased_path\nMSYS2 = tools_win.MSYS2\nMSYS = tools_win.MSYS\nCYGWIN = tools_win.CYGWIN\nWSL = tools_win.WSL\nSFU = tools_win.SFU\nunix_path = tools_win.unix_path\nrun_in_windows_bash = tools_win.run_in_windows_bash\n\n\n@contextmanager\ndef vcvars(*args, **kwargs):\n    with tools_win.vcvars(output=_global_output, *args, **kwargs):\n        yield\n\n\ndef msvc_build_command(*args, **kwargs):\n    return tools_win.msvc_build_command(output=_global_output, *args, **kwargs)\n\n\ndef build_sln_command(*args, **kwargs):\n    return tools_win.build_sln_command(output=_global_output, *args, **kwargs)\n\n\ndef vcvars_command(*args, **kwargs):\n    return tools_win.vcvars_command(output=_global_output, *args, **kwargs)\n\n\ndef vcvars_dict(*args, **kwargs):\n    return tools_win.vcvars_dict(output=_global_output, *args, **kwargs)\n\n\ndef latest_vs_version_installed(*args, **kwargs):\n    return tools_win.latest_vs_version_installed(output=_global_output, *args, **kwargs)\n\n\n# Ready to use objects.\ntry:\n    os_info = OSInfo()\nexcept Exception as exc:\n    logger.error(exc)\n    _global_output.error(\"Error detecting os_info\")\n", "path": "conans/tools.py"}], "after_files": [{"content": "\"\"\"\n    Conan tools: classes and function in this module are intended to be used out of the box\n    with the Conan configuration already currified into them. This configuration refers\n    mainly to two items:\n     - requester: on network calls, this will include proxy definition.\n     - output: the output configuration\n\n    Here in this module there should be no logic, all functions and classes must be implemented\n    elsewhere (mainly in conans.util or conans.client.tools) and ready to be used without\n    the currification.\n\"\"\"\n\nimport requests\n\nfrom conans.client.output import ConanOutput\n# Tools from conans.client.tools\nfrom conans.client.tools import files as tools_files, net as tools_net, oss as tools_oss, \\\n    system_pm as tools_system_pm, win as tools_win\nfrom conans.client.tools.env import *  # pylint: disable=unused-import\nfrom conans.client.tools.pkg_config import *  # pylint: disable=unused-import\nfrom conans.client.tools.scm import *  # pylint: disable=unused-import\nfrom conans.client.tools.apple import *\n# Tools form conans.util\nfrom conans.util.env_reader import get_env\nfrom conans.util.files import _generic_algorithm_sum, load, md5, md5sum, mkdir, relative_dirs, \\\n    rmdir, save as files_save, save_append, sha1sum, sha256sum, touch, sha1sum, sha256sum, \\\n    to_file_bytes, touch\nfrom conans.util.log import logger\nfrom conans.client.tools.version import Version\n\n\n# This global variables are intended to store the configuration of the running Conan application\n_global_output = None\n_global_requester = None\n\n\ndef set_global_instances(the_output, the_requester):\n    global _global_output\n    global _global_requester\n\n    old_output, old_requester = _global_output, _global_requester\n\n    # TODO: pass here the configuration file, and make the work here (explicit!)\n    _global_output = the_output\n    _global_requester = the_requester\n\n    return old_output, old_requester\n\n\ndef get_global_instances():\n    return _global_output, _global_requester\n\n\n# Assign a default, will be overwritten in the factory of the ConanAPI\nset_global_instances(the_output=ConanOutput(sys.stdout, True), the_requester=requests)\n\n\n\"\"\"\nFrom here onwards only currification is expected, no logic\n\"\"\"\n\n\ndef save(path, content, append=False):\n    # TODO: All this three functions: save, save_append and this one should be merged into one.\n    if append:\n        save_append(path=path, content=content)\n    else:\n        files_save(path=path, content=content, only_if_modified=False)\n\n\n# From conans.client.tools.net\nftp_download = tools_net.ftp_download\n\n\ndef download(*args, **kwargs):\n    return tools_net.download(out=_global_output, requester=_global_requester, *args, **kwargs)\n\n\ndef get(*args, **kwargs):\n    return tools_net.get(output=_global_output, requester=_global_requester, *args, **kwargs)\n\n\n# from conans.client.tools.files\nchdir = tools_files.chdir\nhuman_size = tools_files.human_size\nuntargz = tools_files.untargz\ncheck_with_algorithm_sum = tools_files.check_with_algorithm_sum\ncheck_sha1 = tools_files.check_sha1\ncheck_md5 = tools_files.check_md5\ncheck_sha256 = tools_files.check_sha256\npatch = tools_files.patch\nreplace_prefix_in_pc_file = tools_files.replace_prefix_in_pc_file\ncollect_libs = tools_files.collect_libs\nwhich = tools_files.which\nunix2dos = tools_files.unix2dos\ndos2unix = tools_files.dos2unix\n\n\ndef unzip(*args, **kwargs):\n    return tools_files.unzip(output=_global_output, *args, **kwargs)\n\n\ndef replace_in_file(*args, **kwargs):\n    return tools_files.replace_in_file(output=_global_output, *args, **kwargs)\n\n\ndef replace_path_in_file(*args, **kwargs):\n    return tools_files.replace_path_in_file(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.oss\nargs_to_string = tools_oss.args_to_string\ndetected_architecture = tools_oss.detected_architecture\ndetected_os = tools_oss.detected_os\nOSInfo = tools_oss.OSInfo\ncross_building = tools_oss.cross_building\nget_cross_building_settings = tools_oss.get_cross_building_settings\nget_gnu_triplet = tools_oss.get_gnu_triplet\n\n\ndef cpu_count(*args, **kwargs):\n    return tools_oss.cpu_count(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.system_pm\nclass SystemPackageTool(tools_system_pm.SystemPackageTool):\n    def __init__(self, *args, **kwargs):\n        super(SystemPackageTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass NullTool(tools_system_pm.NullTool):\n    def __init__(self, *args, **kwargs):\n        super(NullTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass AptTool(tools_system_pm.AptTool):\n    def __init__(self, *args, **kwargs):\n        super(AptTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass YumTool(tools_system_pm.YumTool):\n    def __init__(self, *args, **kwargs):\n        super(YumTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass BrewTool(tools_system_pm.BrewTool):\n    def __init__(self, *args, **kwargs):\n        super(BrewTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PkgTool(tools_system_pm.PkgTool):\n    def __init__(self, *args, **kwargs):\n        super(PkgTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass ChocolateyTool(tools_system_pm.ChocolateyTool):\n    def __init__(self, *args, **kwargs):\n        super(ChocolateyTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PkgUtilTool(tools_system_pm.PkgUtilTool):\n    def __init__(self, *args, **kwargs):\n        super(PkgUtilTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass PacManTool(tools_system_pm.PacManTool):\n    def __init__(self, *args, **kwargs):\n        super(PacManTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\nclass ZypperTool(tools_system_pm.ZypperTool):\n    def __init__(self, *args, **kwargs):\n        super(ZypperTool, self).__init__(output=_global_output, *args, **kwargs)\n\n\n# from conans.client.tools.win\nvs_installation_path = tools_win.vs_installation_path\nvswhere = tools_win.vswhere\nvs_comntools = tools_win.vs_comntools\nfind_windows_10_sdk = tools_win.find_windows_10_sdk\nescape_windows_cmd = tools_win.escape_windows_cmd\nget_cased_path = tools_win.get_cased_path\nMSYS2 = tools_win.MSYS2\nMSYS = tools_win.MSYS\nCYGWIN = tools_win.CYGWIN\nWSL = tools_win.WSL\nSFU = tools_win.SFU\nunix_path = tools_win.unix_path\nrun_in_windows_bash = tools_win.run_in_windows_bash\n\n\n@contextmanager\ndef vcvars(*args, **kwargs):\n    with tools_win.vcvars(output=_global_output, *args, **kwargs):\n        yield\n\n\ndef msvc_build_command(*args, **kwargs):\n    return tools_win.msvc_build_command(output=_global_output, *args, **kwargs)\n\n\ndef build_sln_command(*args, **kwargs):\n    return tools_win.build_sln_command(output=_global_output, *args, **kwargs)\n\n\ndef vcvars_command(*args, **kwargs):\n    return tools_win.vcvars_command(output=_global_output, *args, **kwargs)\n\n\ndef vcvars_dict(*args, **kwargs):\n    return tools_win.vcvars_dict(output=_global_output, *args, **kwargs)\n\n\ndef latest_vs_version_installed(*args, **kwargs):\n    return tools_win.latest_vs_version_installed(output=_global_output, *args, **kwargs)\n\n\n# Ready to use objects.\ntry:\n    os_info = OSInfo()\nexcept Exception as exc:\n    logger.error(exc)\n    _global_output.error(\"Error detecting os_info\")\n", "path": "conans/tools.py"}]}