spitzip/module/prochelper.py

70 lines
1.5 KiB
Python

import subprocess
import os
def perr(rtn,cmd = None,op = None):
if rtn == 0: return
if cmd == None: cmd = []
exc = subprocess.CalledProcessError(rtn,cmd,op)
raise exc
def pcall(*args,**kwargs):
rtn = subprocess.Popen(*args,**kwargs).wait()
perr(rtn,args[0])
def pcallStr(*args,**kwargs):
proc = subprocess.Popen(*args,**kwargs, stdout=subprocess.PIPE)
response = proc.stdout.read().decode("utf-8").strip("\n")
rtn = proc.wait()
perr(rtn,args[0])
return response
def pcallLines(*args,**kwargs):
proc = subprocess.Popen(*args,**kwargs, stdout=subprocess.PIPE)
line = b""
while True:
b = proc.stdout.read(1)
if b == b"":
yield line.decode("utf-8")
break
if b == b"\n":
yield line.decode("utf-8")
line = b""
continue
line = line + b
rtn = proc.wait()
perr(rtn,args[0])
langStore = False
def setLanguage(lang = None):
def getLanguageEnvs():
envs = []
for env in os.environ:
if env.startswith("LC_"):
envs.append(env)
continue
if env in ["LANGUAGE","LANG"]:
envs.append(env)
continue
return envs
def unsetLanguage():
for env in getLanguageEnvs():
del os.environ[env]
if lang == None:
if langStore == False: return
unsetLanguage()
for env in langStore: os.environ[env] = langStore[env]
langStore = False
return
langStore = {}
for env in getLanguageEnvs():
langStore[env] = os.environ[env]
unsetLanguage()
os.environ["LANGUAGE"] = lang
os.environ["LC_ALL"] = lang
os.environ["LANG"] = lang