This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: platform() is not able to detect windows 11
Type: Stage: patch review
Components: Library (Lib) Versions: Python 3.10
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Evernow, eryksun, lemburg, lukasz.langa, miss-islington, paul.moore, sahsariga111, steve.dower, tim.golden, zach.ware
Priority: normal Keywords: patch

Created on 2021-10-05 19:43 by sahsariga111, last changed 2022-04-11 14:59 by admin.

Files
File name Uploaded Description Edit
demo.py sahsariga111, 2021-10-05 19:58
import subprocess.py sahsariga111, 2021-10-07 07:49
main.py sahsariga111, 2021-10-07 10:20
main.py sahsariga111, 2021-10-07 11:05
Pull Requests
URL Status Linked Edit
PR 30817 merged vstinner, 2022-01-23 01:51
PR 30890 merged vstinner, 2022-01-25 18:25
PR 30891 merged vstinner, 2022-01-25 19:07
PR 30894 merged miss-islington, 2022-01-25 20:21
Messages (38)
msg403260 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-05 19:43
I am updated to windows 11 . Now I am trying to write script that will detect is user use windows 11 or windows 10 . 
I was using the simplest way as possible: 
import platform 
print(platform.platform())
The result I got is : Windows-10-10.0.22000-SP0
That is quite correct . The build version is correct ,but the windows version is still not .
msg403261 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-05 19:46
The 
platform.win32_ver() returns same answer
msg403262 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-05 19:52
The bug comes from Microsoft  terminal bug : If I type there : ver it will return Microsoft Windows [Version 10.0.22000.194] only one patch is if that will check the build . 
so : 
 info = subprocess.check_output(cmd,
                                           stdin=subprocess.DEVNULL,
                                           stderr=subprocess.DEVNULL,
                                           text=True,
                                           shell=True)
if(int(info.strip(".")[2])==22000):
 return "Windows [Version 11.0.22000.194]
msg403263 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-05 19:58
demo.py contains dirty hack that can be used as a fix for some time before microsoft will not fix it.
msg403264 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2021-10-05 20:17
win32_ver() should be using the internal Windows APIs to figure out the version. I do wonder why those don't return the same version as the "ver" command line tool.

Adding our Windows experts to the noisy list.
msg403265 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2021-10-05 20:30
The version number for "Windows 11" still starts with 10.0. Just like how Windows 5.x and 6.x were around for a very long time each ;)

There are tables in platform module that map the specific version to the release name. These probably need to be updated to return "11" for versions 10.0.22000 and greater.
msg403267 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2021-10-05 20:35
On 05.10.2021 22:30, Steve Dower wrote:
> The version number for "Windows 11" still starts with 10.0. Just like how Windows 5.x and 6.x were around for a very long time each ;)
> 
> There are tables in platform module that map the specific version to the release name. These probably need to be updated to return "11" for versions 10.0.22000 and greater.

Hmm, but the "ver" output seems to have more information than those
APIs.

Note: The tables for mapping to releases for Windows only take the
major.minor versions as key. Unfortunately, those did not change. It's
actually the build version which provides the indicator, it seems.

Any idea, whether a patch will fix this on Windows soonish ?
msg403271 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2021-10-05 21:31
The _WIN32_CLIENT_RELEASES table based on major.minor version number isn't helpful since Windows 10 and 11 have the same version number. win32_ver() needs a workaround to return release "11" if the build number is 22000 or greater. Is there any need/desire to also identify Server 2016, 2019, and 2022?
msg403272 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2021-10-05 21:41
> Hmm, but the "ver" output seems to have more information than those APIs.

It's always had build numbers, which the regular APIs do not, because the regular APIs are meant for detecting incompatibilities rather than reporting.

Since there are some incompatibilities, I hope they'll rev the minor version number, but I have no idea if that's planned yet. In theory I have early access to the release build already, but I haven't installed it on anything.

Eventually I think we're going to need some kind of WMI call in the platform module to get the right data for reporting. Until then, we're making best guesses from heuristics.
msg403357 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-07 07:49
systeminfo can be option
msg403358 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2021-10-07 07:58
It's probably time to extend the marketing version detection mechanism to use
the build number as reference instead of the major.minor system version numbers.

Here's a good reference for this:

https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions

MS resources:

https://docs.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version
https://docs.microsoft.com/en-us/windows/release-health/release-information
msg403379 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-07 10:20
That nice idea . So the dist can contain the minimal build required to say that is for example windows 11 . The simplest solution that came in mind is . Is far from perfect but it works.
msg403386 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-07 11:05
Beter solution . Using match in python 3.10
msg403452 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2021-10-08 00:15
> use the build number as reference instead of the major.minor

It could check the (major, minor, build) tuple, which allows reporting 10.1+ as "post11" and minimizes hard coding of build numbers. For example, given win32_ver() iterates by (major, minor, build) thresholds:

    _WIN32_CLIENT_RELEASES = [
        ((10, 1, 0), "post11"),
        ((10, 0, 22000), "11"),
        ((6, 4, 0), "10"),
        ((6, 3, 0), "8.1"),
        ((6, 2, 0), "8"),
        ((6, 1, 0), "7"),
        ((6, 0, 0), "Vista"),
        ((5, 2, 3790), "XP64"),
        ((5, 2, 0), "XPMedia"),
        ((5, 1, 0), "XP"),
        ((5, 0, 0), "2000"),
    ]

    _WIN32_SERVER_RELEASES = [
        ((10, 1, 0), "post2022Server"),
        ((10, 0, 20348), "2022Server"),
        ((10, 0, 17763), "2019Server"),
        ((6, 4, 0), "2016Server"),
        ((6, 3, 0), "2012ServerR2"),
        ((6, 2, 0), "2012Server"),
        ((6, 1, 0), "2008ServerR2"),
        ((6, 0, 0), "2008Server"),
        ((5, 2, 0), "2003Server"),
        ((5, 0, 0), "2000Server"),
    ]

In win32_ver():

    if major >= 5: # NT systems
        if getattr(winver, 'product_type', None) == 3: # VER_NT_SERVER
            release_list = _WIN32_SERVER_RELEASES
        else:
            release_list = _WIN32_CLIENT_RELEASES
        ver = major, minor, build
        for release_ver, release_name in release_list:
            if ver >= release_ver:
                release = release_name
                break
msg403459 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2021-10-08 07:18
On 08.10.2021 02:15, Eryk Sun wrote:
> 
>> use the build number as reference instead of the major.minor
> 
> It could check the (major, minor, build) tuple, which allows reporting 10.1+ as "post11" and minimizes hard coding of build numbers. For example, given win32_ver() iterates by (major, minor, build) thresholds:

Great idea.

Could you prepare a PR for this ?
msg403471 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021-10-08 12:10
macOS has a similar issue in the platform module. Previously, platform gave the darwin kernel version, whereas most users only know macOS versions. See bpo-35344.

Even if Microsoft decided to internally stay at 10.x, IMO users really expect "Windows 11" when requesting the Windows version, especially in platform.platform().
msg404451 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2021-10-20 13:45
All that said, if we're going to shell out to "ver", we may as well try "wmic os get Caption,Version /value" first and parse its output. For me, it looks like the below (with a number of blank lines around it):

Caption=Microsoft Windows 10 Enterprise
Version=10.0.19043

I would assume the output is in MBCS, and there doesn't appear to be an option to change that - the "/locale" option appears to influence translations, rather than encoding.

We'd still want the "ver" fallback I think. The wmic command is deprecated in favour of PowerShell commands, which means we would have to implement native calls to get equivalent functionality. But I expect neither cmd.exe nor wmic.exe will actually disappear for a long time.
msg404591 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2021-10-21 12:14
On my Win11 it returns me :

C:\Users\Win10Home>wmic os get Caption,Version /value


Caption=Microsoft Windows 11 Home Single Language
Version=10.0.22000
msg411331 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-23 02:08
I wrote PR 30817 to log "ver" and "wmic os get Caption,Version /value" command output in test.pythoninfo. I would like to check if Windows Server 2022 is deployed on CI used by Python :-) I'm trying to understand why bpo-41682 "[Windows] test_asyncio: Proactor test_sendfile_close_peer_in_the_middle_of_receiving failure" started to fail more often recently.
msg411336 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-23 03:03
New changeset b0898f4aa90d9397e23aef98a2d6b82445ee7455 by Victor Stinner in branch 'main':
bpo-45382: test.pythoninfo logs more Windows versions (GH-30817)
https://github.com/python/cpython/commit/b0898f4aa90d9397e23aef98a2d6b82445ee7455
msg411474 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2022-01-24 14:35
Yeah, I pushed the machines up to 2022 the other day while tidying the configs. Wouldn't have expected it to impact that issue though, it's fully within OpenSSL, isn't it? (We also updated that recently...)

Also, as an FYI, if you use "wmic /output:<filename>" then it always writes in utf-16-le with a BOM. It's *very* unlikely you'll ever get output that doesn't fit into MBCS, but if that does ever occur, we can use a temporary file instead of stdout.
msg411498 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2022-01-24 17:47
> It's *very* unlikely you'll ever get output that doesn't fit into MBCS,

When writing to a pipe, wmic.exe hard codes using the process OEM code page (i.e. CP_OEMCP). If it matters, running wmic.exe with subprocess should use encoding='oem' instead of text=True.

That said, wmic.exe is deprecated. I suggest using PowerShell instead. For example:

    import os
    import json
    import subprocess

    cmd = 'Get-CimInstance Win32_OperatingSystem | Select Caption, Version | ConvertTo-Json'
    p = subprocess.run(f'powershell.exe -c "{cmd}"', capture_output=True, encoding=os.device_encoding(1))
    result = json.loads(p.stdout)

PowerShell uses the console's output code page (i.e. os.device_encoding(1)) when writing to stdout, even if it's a pipe. (If PowerShell is run without a console via DETACHED_PROCESS, then it outputs nothing to stdout.) The only way I know of to make PowerShell write UTF-8 to stdout when it's a pipe is by temporarily changing the console output code page. Assuming the current process has a console, you have to first get the current code page with GetConsoleOutputCP(). Change the code page to UTF-8 via SetConsoleOutputCP(CP_UTF8). Run the PowerShell command. Finally, restore the original code page.

Maybe subprocess should provide a context manager to set the console code pages before a call, and restore the previous console code pages and console modes after a call completes. That's what CLI shells such as CMD do when running an external program.
msg411659 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-25 18:27
> When writing to a pipe, wmic.exe hard codes using the process OEM code page (i.e. CP_OEMCP). If it matters, running wmic.exe with subprocess should use encoding='oem' instead of text=True.

Oh ok, I wrote PR 30890 to fix the wmic.exe encoding.

I would prefer to avoid a named temporary file if possible, until it's really needed.

I'm only aware of the Fedora operating system which made fun of non-ASCII users once with "Fedora release 19 (Schrödinger's Cat)": https://lwn.net/Articles/545741/
msg411661 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-25 19:02
New changeset cef0a5458f254c2f8536b928dee25862ca90ffa6 by Victor Stinner in branch 'main':
bpo-45382: test.pythoninfo: set wmic.exe encoding to OEM (GH-30890)
https://github.com/python/cpython/commit/cef0a5458f254c2f8536b928dee25862ca90ffa6
msg411663 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2022-01-25 19:07
Thanks guys. Microsoft is always pain for us.
Bit wmic seems nice solution.
Is still working for windows lower than 11?
msg411671 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-25 20:20
New changeset 4a57fa296b92125e41220ecd201eb2e432b79fb0 by Victor Stinner in branch '3.10':
[3.10] bpo-45382: test.pythoninfo logs more Windows versions (GH-30891)
https://github.com/python/cpython/commit/4a57fa296b92125e41220ecd201eb2e432b79fb0
msg411694 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2022-01-26 00:29
> Bit wmic seems nice solution.
> Is still working for windows lower than 11?

wmic.exe is still included in Windows 10 and 11, but it's officially deprecated [1], which means it's no longer being actively developed, and it might be removed in a future update. PowerShell is the preferred way to use WMI.

---
[1] https://docs.microsoft.com/en-us/windows/deployment/planning/windows-10-deprecated-features
msg411696 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-26 01:17
I don't understand why we have to handle XML or JSON and encoding... just to get a version number. Why did Microsoft make it so complicated?

sys.getwindowsversion() which exposes GetVersionEx() looks fine to me.
msg411704 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2022-01-26 05:05
> sys.getwindowsversion() which exposes GetVersionEx() looks fine to me.

In Windows 8+, sys.getwindowsversion() returns a version that can vary from 6.2.9200 (Windows 8) up to the actual OS version. It depends on the OS versions supported by the application manifest -- with 6.2.9200 used when there's no application manifest. The platform module uses the shell's VER command because it returns the real OS version.

The version number for Windows 11 is 10.0.22000+. The platform module misreports this as Windows 10. In msg403452, I suggested a modification to use build numbers. In msg404451 Steve said we may as well use the WMI result to identify Windows 11 based on the OS caption. If we use WMI, we can choose to rely on wmic.exe (deprecated), PowerShell, or implement our own code in C/C++.

> I don't understand why we have to handle XML or JSON and encoding... 

Using JSON or XML (ElementTree) isn't required, if you'd rather parse human-readable output. AFAIK, the Win32_OperatingSystem caption is always ASCII. 

In general, wmic.exe writes output text to a pipe that's encoded with the system OEM code page. pwsh.exe, powershell.exe, and cmd.exe write output text to a pipe (from their internal commands/cmdlets) that's encoded using the console's output code page. cmd.exe also supports a /U option to use UTF-16.
msg411711 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2022-01-26 08:07
The quick research on web gived me that C/C++ developers will just get the
build version and compare it with predefined list.
See more there:
https://docs.microsoft.com/answers/questions/672988/c-detect-windows-build.html

ср, 26 янв. 2022 г., 05:05 Eryk Sun <report@bugs.python.org>:

>
> Eryk Sun <eryksun@gmail.com> added the comment:
>
> > sys.getwindowsversion() which exposes GetVersionEx() looks fine to me.
>
> In Windows 8+, sys.getwindowsversion() returns a version that can vary
> from 6.2.9200 (Windows 8) up to the actual OS version. It depends on the OS
> versions supported by the application manifest -- with 6.2.9200 used when
> there's no application manifest. The platform module uses the shell's VER
> command because it returns the real OS version.
>
> The version number for Windows 11 is 10.0.22000+. The platform module
> misreports this as Windows 10. In msg403452, I suggested a modification to
> use build numbers. In msg404451 Steve said we may as well use the WMI
> result to identify Windows 11 based on the OS caption. If we use WMI, we
> can choose to rely on wmic.exe (deprecated), PowerShell, or implement our
> own code in C/C++.
>
> > I don't understand why we have to handle XML or JSON and encoding...
>
> Using JSON or XML (ElementTree) isn't required, if you'd rather parse
> human-readable output. AFAIK, the Win32_OperatingSystem caption is always
> ASCII.
>
> In general, wmic.exe writes output text to a pipe that's encoded with the
> system OEM code page. pwsh.exe, powershell.exe, and cmd.exe write output
> text to a pipe (from their internal commands/cmdlets) that's encoded using
> the console's output code page. cmd.exe also supports a /U option to use
> UTF-16.
>
> ----------
>
> _______________________________________
> Python tracker <report@bugs.python.org>
> <https://bugs.python.org/issue45382>
> _______________________________________
>
msg411712 - (view) Author: Alex Zaslavskis (sahsariga111) Date: 2022-01-26 08:08
The quick research on web gived me that C/C++ developers will just get the build version and compare it with predefined list.
See more there: https://docs.microsoft.com/answers/questions/672988/c-detect-windows-build.html
msg411714 - (view) Author: Marc-Andre Lemburg (lemburg) * (Python committer) Date: 2022-01-26 08:20
On 26.01.2022 01:29, Eryk Sun wrote:
> 
> Eryk Sun <eryksun@gmail.com> added the comment:
> 
>> Bit wmic seems nice solution.
>> Is still working for windows lower than 11?
> 
> wmic.exe is still included in Windows 10 and 11, but it's officially deprecated [1], which means it's no longer being actively developed, and it might be removed in a future update. PowerShell is the preferred way to use WMI.

All of these require shelling out to the OS, so why not stick to
`ver` as we've done in the past. This has existed for ages and
will most likely not disappear anytime soon.

Is there a good reason to prefer wmic or PowerShell (which are
less likely to be available or reliable) ?

> ---
> [1] https://docs.microsoft.com/en-us/windows/deployment/planning/windows-10-deprecated-features
-- 
Marc-Andre Lemburg
eGenix.com
msg411762 - (view) Author: Eryk Sun (eryksun) * (Python triager) Date: 2022-01-26 15:47
> AFAIK, the Win32_OperatingSystem caption is always ASCII. 

I think I was wrong here. The "Caption" field is localized, so the wmic.exe OEM encoded output to a pipe isn't reliable. The system OEM code page doesn't necessarily match the display/preferred language of the current user. It could be a lossy encoding with default and best-fit translations (e.g. "?"; "α" -> "a"). If using wmic.exe, it's better to redirect the output to a temp file, which will be UTF-16.
msg411763 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2022-01-26 15:54
sys.getwindowsversion() is affected to Microsoft's minimal rebuilds of 
OS components causing core DLLs to have older versions than the release, 
and also to compatibility modes that may report earlier versions if API 
behaviour is being emulated.

The best way for us to use WMI is to call it directly. There are native 
APIs to access it and retrieve the data directly. It's just nobody has 
written it yet.

Calling out to Powershell needs to account for cases where Powershell is 
not present, is disabled/blocked/limited, or is a different version. We 
can rely on the native APIs (at least, if they fail, there's nothing 
better we could possibly have done).

WMI is essentially the Windows equivalent of the platform module, so 
there's no reason all the APIs in platform.py shouldn't use it, and 
every reason that sys/os *shouldn't* use it.
msg411764 - (view) Author: Steve Dower (steve.dower) * (Python committer) Date: 2022-01-26 15:57
>> AFAIK, the Win32_OperatingSystem caption is always ASCII.
> 
> I think I was wrong here. The "Caption" field is localized, so the wmic.exe OEM encoded output to a pipe isn't reliable.

Correct. And while "Windows" itself is never translated, the caption may 
include terms that are translated (e.g., IIRC, the extra names for 
point-of-sales versions).
msg415333 - (view) Author: Łukasz Langa (lukasz.langa) * (Python committer) Date: 2022-03-16 10:13
New changeset 0b0609d0d1a2f231c94bab2177095dd9a46fc137 by Miss Islington (bot) in branch '3.9':
[3.10] bpo-45382: test.pythoninfo logs more Windows versions (GH-30891) (GH-30894)
https://github.com/python/cpython/commit/0b0609d0d1a2f231c94bab2177095dd9a46fc137
msg416142 - (view) Author: Evernow (Evernow) Date: 2022-03-28 03:14
As mentioned wmic is deprecated ( https://docs.microsoft.com/en-us/windows/win32/wmisdk/wmic ). 

I don't see why the wmi module ( https://pypi.org/project/WMI/ ) can't be used instead to get the information, I have a working implementation of this that simply does the following: 

current_major_version = wmi.WMI().Win32_OperatingSystem()[0].Caption.encode("ascii", "ignore").decode(
            "utf-8")
if "8" in current_major_version:
        pass
elif "7" in current_major_version:  
        pass
elif "10" in current_major_version:  
        pass
elif "11" in current_major_version:
	pass
msg416146 - (view) Author: Tim Golden (tim.golden) * (Python committer) Date: 2022-03-28 07:10
> I don't see why the wmi module ( https://pypi.org/project/WMI/ ) can't be used instead to get the information

Well I can speak here as the author of that module and as an (occasional) core developer. The wmi module stands on the shoulderes of the pywin32 win32com.client code -- which is an _enormous_ dependency to bring into Python. (And which no-one would realistically agree to...)
History
Date User Action Args
2022-04-11 14:59:50adminsetgithub: 89545
2022-03-28 07:10:50tim.goldensetmessages: + msg416146
2022-03-28 03:14:47Evernowsetnosy: + Evernow
messages: + msg416142
2022-03-16 10:13:59lukasz.langasetnosy: + lukasz.langa
messages: + msg415333
2022-02-27 07:29:28eryksunlinkissue46869 superseder
2022-01-26 15:57:29steve.dowersetmessages: + msg411764
2022-01-26 15:54:48steve.dowersetmessages: + msg411763
2022-01-26 15:47:55eryksunsetmessages: + msg411762
2022-01-26 14:30:45vstinnersetnosy: - vstinner
2022-01-26 08:20:08lemburgsetmessages: + msg411714
2022-01-26 08:08:14sahsariga111setmessages: + msg411712
2022-01-26 08:07:28sahsariga111setmessages: + msg411711
2022-01-26 05:05:27eryksunsetmessages: + msg411704
2022-01-26 01:17:58vstinnersetmessages: + msg411696
2022-01-26 00:29:45eryksunsetmessages: + msg411694
2022-01-25 20:21:14miss-islingtonsetnosy: + miss-islington
pull_requests: + pull_request29075
2022-01-25 20:20:48vstinnersetmessages: + msg411671
2022-01-25 19:07:51sahsariga111setmessages: + msg411663
2022-01-25 19:07:21vstinnersetpull_requests: + pull_request29074
2022-01-25 19:02:31vstinnersetmessages: + msg411661
2022-01-25 18:27:13vstinnersetmessages: + msg411659
2022-01-25 18:25:08vstinnersetpull_requests: + pull_request29073
2022-01-24 17:47:39eryksunsetmessages: + msg411498
2022-01-24 14:35:59steve.dowersetmessages: + msg411474
2022-01-23 03:03:50vstinnersetmessages: + msg411336
2022-01-23 02:08:29vstinnersetmessages: + msg411331
2022-01-23 01:51:01vstinnersetkeywords: + patch
stage: patch review
pull_requests: + pull_request29004
2021-10-21 12:14:35sahsariga111setmessages: + msg404591
2021-10-20 13:45:41steve.dowersetmessages: + msg404451
2021-10-08 12:10:40vstinnersetnosy: + vstinner
messages: + msg403471
2021-10-08 07:18:56lemburgsetmessages: + msg403459
2021-10-08 00:15:13eryksunsetmessages: + msg403452
2021-10-07 11:05:47sahsariga111setfiles: + main.py

messages: + msg403386
2021-10-07 10:20:02sahsariga111setfiles: + main.py

messages: + msg403379
2021-10-07 07:58:49lemburgsetmessages: + msg403358
2021-10-07 07:49:14sahsariga111setfiles: + import subprocess.py

messages: + msg403357
2021-10-05 21:43:48zach.waresetnosy: + eryksun
2021-10-05 21:41:33steve.dowersetnosy: - eryksun
messages: + msg403272
2021-10-05 21:31:26eryksunsetnosy: + eryksun
messages: + msg403271
2021-10-05 20:35:06lemburgsetmessages: + msg403267
2021-10-05 20:30:35steve.dowersetmessages: + msg403265
2021-10-05 20:17:15lemburgsetnosy: + lemburg, paul.moore, tim.golden, zach.ware, steve.dower
messages: + msg403264
2021-10-05 19:58:45sahsariga111setfiles: + demo.py

messages: + msg403263
2021-10-05 19:52:28sahsariga111setmessages: + msg403262
2021-10-05 19:46:01sahsariga111setmessages: + msg403261
2021-10-05 19:43:57sahsariga111create