AutoFramework/Base/Class/Command.py

29 lines
1.0 KiB
Python

import re,chardet,subprocess
def shell(cmd='', stdout='', stderr='', timeout=None):
match stdout:
case 'NULL' | 'Null' | 'null':
stdoutCh = subprocess.DEVNULL
case _:
stdoutCh = subprocess.PIPE
match stderr:
case 'NULL' | 'Null' | 'null':
stderrCh = subprocess.DEVNULL
case _:
stderrCh = subprocess.PIPE
execResult = subprocess.run(cmd, shell=True, stdout=stdoutCh, stderr=stderrCh, timeout=timeout)
stdoutContent = ''
stderrContent = ''
if execResult.stdout:
stdoutContent = execResult.stdout.decode(chardet.detect(execResult.stdout)["encoding"] or 'UTF-8')
if execResult.stderr:
stderrContent = execResult.stderr.decode(chardet.detect(execResult.stderr)["encoding"] or 'UTF-8')
return {
"returncode": execResult.returncode,
"stdout": stdoutContent,
"stderr": stderrContent
}
if __name__ == '__main__':
# Example.
print(shell('ping www.baidu.com',timeout=10)['stdout'])