# subprocess

# check_output​执行外部命令

可以使用subprocess.check_output()​执行一个外部命令并获取执行结果,此外还可以通过strerr参数来重定向错误输入以收集,可以使用timeout参数来使用超时机制来执行命令,使用shell参数来让命令被shell执行。

如果执行失败则catch的Exception中会带有一些信息,例如e.ouput​是报错之前的输出,e.returncode​是返回码。

import subprocess
out_bytes = subprocess.check_output(['netstat','-a'])
out_text = out_bytes.decode('utf-8')

"""
>>> import subprocess
>>> out_bytes = subprocess.check_outpit(['ls','-al'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'subprocess' has no attribute 'check_outpit'
>>> out_bytes = subprocess.check_output(['ls','-al'])
>>> out_bytes
b'total 120\ndrwx------ 6 ubuntu ubuntu  4096 Mar  9 10:26 .\ndrwxr-xr-x 6 root   root    4096 Jan 21 00:51 ..\n-rw-r--r-- 1 ubuntu ubuntu 54422 Mar  9 10:27 .bash_history\ndrwx------ 2 ubuntu ubuntu  4096 Aug 12  2020 .cache\n-rw-r--r-- 1 root   root       0 Aug 12  2020 .cloud-warnings.skip\n-rw-rw-r-- 1 ubuntu ubuntu    90 Jan 29 17:45 .gitconfig\ndrwxr-xr-x 2 root   root    4096 Apr 13  2021 .pip\n-rw-r--r-- 1 root   root      73 Apr 13  2021 .pydistutils.cfg\ndrwx------ 2 ubuntu ubuntu  4096 Jan 29 17:46 .ssh\n-rw-r--r-- 1 ubuntu ubuntu     0 Aug 12  2020 .sudo_as_admin_successful\ndrwxr-xr-x 2 ubuntu ubuntu  4096 Jan 21 14:31 .vim\n-rw------- 1 ubuntu ubuntu 19937 Feb  3 10:21 .viminfo\n-rw-rw-r-- 1 ubuntu ubuntu   165 Jan 31 18:13 .wget-hsts\n-rw------- 1 ubuntu ubuntu   183 Mar  9 10:26 .Xauthority\n'
>>> out_text = out_bytes.decode('utf-8')
>>> out_text
'total 120\ndrwx------ 6 ubuntu ubuntu  4096 Mar  9 10:26 .\ndrwxr-xr-x 6 root   root    4096 Jan 21 00:51 ..\n-rw-r--r-- 1 ubuntu ubuntu 54422 Mar  9 10:27 .bash_history\ndrwx------ 2 ubuntu ubuntu  4096 Aug 12  2020 .cache\n-rw-r--r-- 1 root   root       0 Aug 12  2020 .cloud-warnings.skip\n-rw-rw-r-- 1 ubuntu ubuntu    90 Jan 29 17:45 .gitconfig\ndrwxr-xr-x 2 root   root    4096 Apr 13  2021 .pip\n-rw-r--r-- 1 root   root      73 Apr 13  2021 .pydistutils.cfg\ndrwx------ 2 ubuntu ubuntu  4096 Jan 29 17:46 .ssh\n-rw-r--r-- 1 ubuntu ubuntu     0 Aug 12  2020 .sudo_as_admin_successful\ndrwxr-xr-x 2 ubuntu ubuntu  4096 Jan 21 14:31 .vim\n-rw------- 1 ubuntu ubuntu 19937 Feb  3 10:21 .viminfo\n-rw-rw-r-- 1 ubuntu ubuntu   165 Jan 31 18:13 .wget-hsts\n-rw------- 1 ubuntu ubuntu   183 Mar  9 10:26 .Xauthority\n'
"""