29 lines
1.0 KiB
Python
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'])
|