4040from operator import itemgetter
4141from urllib .parse import unquote , urlsplit
4242
43- # We depend on python 3.8 features
44- if sys .version_info < (3 , 8 ): # noqa: UP036
45- print (f'error: emrun requires python 3.8 or above ({ sys .executable } { sys .version } )' , file = sys .stderr )
46- sys .exit (1 )
43+ assert sys .version_info >= (3 , 10 ), f'emscripten requires python 3.10 or above ({ sys .executable } { sys .version } )'
4744
4845# Populated from cmdline params
4946emrun_options = None
109106 LINUX = True
110107elif platform .system () == 'FreeBSD' :
111108 FREEBSD = True
112- elif platform .mac_ver ()[0 ] != '' :
109+ elif platform .mac_ver ()[0 ]:
113110 MACOS = True
114111 import plistlib
115112
@@ -225,7 +222,7 @@ def delete_emrun_safe_firefox_profile():
225222def create_emrun_safe_firefox_profile ():
226223 global temp_firefox_profile_dir
227224 temp_firefox_profile_dir = tempfile .mkdtemp (prefix = 'temp_emrun_firefox_profile_' )
228- with open (os .path .join (temp_firefox_profile_dir , 'prefs.js' ), 'w' ) as f :
225+ with open (os .path .join (temp_firefox_profile_dir , 'prefs.js' ), 'w' , encoding = 'utf-8' ) as f :
229226 f .write ('''
230227// Old Firefox browsers have a maxPerDomain limit of 20. Newer Firefox browsers default to 512. Match the new
231228// default here to help test spawning a lot of threads also on older Firefox versions.
@@ -780,7 +777,7 @@ def get_cpu_info():
780777 logical_cores = int (check_output (['sysctl' , '-n' , 'machdep.cpu.thread_count' ]).strip ())
781778 frequency = int (check_output (['sysctl' , '-n' , 'hw.cpufrequency' ]).strip ()) // 1000000
782779 elif LINUX :
783- for line in open ('/proc/cpuinfo' ).readlines ():
780+ for line in open ('/proc/cpuinfo' , encoding = 'utf-8' ).readlines ():
784781 if 'model name' in line :
785782 cpu_name = re .sub ('.*model name.*:' , '' , line , count = 1 ).strip ()
786783 lscpu = check_output (['lscpu' ])
@@ -1031,7 +1028,7 @@ def win_get_file_properties(fname):
10311028 strInfo = {}
10321029 for propName in propNames :
10331030 strInfoPath = u'\\ StringFileInfo\\ %04X%04X\\ %s' % (lang , codepage , propName )
1034- ## print str_info
1031+ # print str_info
10351032 strInfo [propName ] = win32api .GetFileVersionInfo (fname , strInfoPath )
10361033
10371034 props ['StringFileInfo' ] = strInfo
@@ -1043,7 +1040,7 @@ def get_computer_model():
10431040 try :
10441041 if MACOS :
10451042 try :
1046- with open (os .path .join (os .getenv ("HOME" ), '.emrun.hwmodel.cached' ), 'r ' ) as f :
1043+ with open (os .path .join (os .getenv ("HOME" ), '.emrun.hwmodel.cached' ), encoding = 'utf-8 ' ) as f :
10471044 model = f .read ()
10481045 return model
10491046 except IOError :
@@ -1059,7 +1056,7 @@ def get_computer_model():
10591056 model = check_output (cmd )
10601057 model = re .search ('<configCode>(.*)</configCode>' , model )
10611058 model = model .group (1 ).strip ()
1062- with open (os .path .join (os .getenv ("HOME" ), '.emrun.hwmodel.cached' ), 'w' ) as fh :
1059+ with open (os .path .join (os .getenv ("HOME" ), '.emrun.hwmodel.cached' ), 'w' , encoding = 'utf-8' ) as fh :
10631060 fh .write (model ) # Cache the hardware model to disk
10641061 return model
10651062 except Exception :
@@ -1089,7 +1086,7 @@ def get_computer_model():
10891086
10901087
10911088def get_os_version ():
1092- bitness = ' (64bit)' if platform .machine () in [ 'AMD64' , 'x86_64' ] else ' (32bit)'
1089+ bitness = ' (64bit)' if platform .machine () in { 'AMD64' , 'x86_64' } else ' (32bit)'
10931090 try :
10941091 if WINDOWS :
10951092 versionHandle = winreg .OpenKey (winreg .HKEY_LOCAL_MACHINE , "SOFTWARE\\ Microsoft\\ Windows NT\\ CurrentVersion" )
@@ -1116,7 +1113,7 @@ def get_system_memory():
11161113 if emrun_options .android :
11171114 lines = check_output ([ADB , 'shell' , 'cat' , '/proc/meminfo' ]).split ('\n ' )
11181115 else :
1119- mem = open ('/proc/meminfo' , 'r ' )
1116+ mem = open ('/proc/meminfo' , encoding = 'utf-8 ' )
11201117 lines = mem .readlines ()
11211118 mem .close ()
11221119 for i in lines :
@@ -1383,13 +1380,14 @@ def get_system_info(format_json):
13831380 return info .strip ()
13841381 else :
13851382 try :
1386- with open (os .path .expanduser ('~/.emrun.generated.guid' )) as fh :
1383+ with open (os .path .expanduser ('~/.emrun.generated.guid' ), encoding = 'utf-8' ) as fh :
13871384 unique_system_id = fh .read ().strip ()
13881385 except Exception :
13891386 import uuid
13901387 unique_system_id = str (uuid .uuid4 ())
13911388 try :
1392- open (os .path .expanduser ('~/.emrun.generated.guid' ), 'w' ).write (unique_system_id )
1389+ with open (os .path .expanduser ('~/.emrun.generated.guid' ), 'w' , encoding = 'utf-8' ) as f :
1390+ f .write (unique_system_id )
13931391 except Exception as e :
13941392 logv (e )
13951393
@@ -1822,13 +1820,13 @@ def run(cmd):
18221820
18231821 if options .log_stdout :
18241822 global browser_stdout_handle
1825- browser_stdout_handle = open (options .log_stdout , 'a' )
1823+ browser_stdout_handle = open (options .log_stdout , 'a' , encoding = 'utf-8' )
18261824 if options .log_stderr :
18271825 global browser_stderr_handle
18281826 if options .log_stderr == options .log_stdout :
18291827 browser_stderr_handle = browser_stdout_handle
18301828 else :
1831- browser_stderr_handle = open (options .log_stderr , 'a' )
1829+ browser_stderr_handle = open (options .log_stderr , 'a' , encoding = 'utf-8' )
18321830 if options .run_browser :
18331831 logv ("Starting browser: %s" % ' ' .join (browser ))
18341832 # if browser[0] == 'cmd':
0 commit comments