当前位置:   article > 正文

python执行shell命令或可执行程序的subprocess模块_raise calledprocesserror(retcode, process.args, su

raise calledprocesserror(retcode, process.args, subprocess.calledprocesserro

官网文档:https://docs.python.org/zh-cn/3/library/subprocess.html

1、shell=True表示执行的命令是内置shell命令而非$PATH中的某个可执行程序,check=True表示对命令执行产生的异常进行raise抛出,如果不加以捕获则调用subprocess的整个程序将trackback打印异常到标准错误后退出,check=False不对命令执行产生的异常进行raise抛出,如果命令产生异常则返回subprocess.CompleteProcess()描述异常的实例,该实例的check_returncode()方法将返回traceback的整个标准错误文本,内容和check=True时打印到标准错误的traceback文本相同。

  1. >>> subprocess.run('exit 1',shell=True,check=True)
  2. Traceback (most recent call last):
  3. File "<stdin>", line 1, in <module>
  4. File "/Users/haypin/miniconda3/envs/Py3.9.5/lib/python3.9/subprocess.py", line 528, in run
  5. raise CalledProcessError(retcode, process.args,
  6. subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1.
  7. >>> subprocess.run('exit 1',shell=False,check=True)
  8. Traceback (most recent call last):
  9. File "<stdin>", line 1, in <module>
  10. File "/Users/haypin/miniconda3/envs/Py3.9.5/lib/python3.9/subprocess.py", line 505, in run
  11. with Popen(*popenargs, **kwargs) as process:
  12. File "/Users/haypin/miniconda3/envs/Py3.9.5/lib/python3.9/subprocess.py", line 951, in __init__
  13. self._execute_child(args, executable, preexec_fn, close_fds,
  14. File "/Users/haypin/miniconda3/envs/Py3.9.5/lib/python3.9/subprocess.py", line 1821, in _execute_child
  15. raise child_exception_type(errno_num, err_msg, err_filename)
  16. FileNotFoundError: [Errno 2] No such file or directory: 'exit 1'
  17. >>> subprocess.run('exit 1',shell=True,check=False)
  18. CompletedProcess(args='exit 1', returncode=1)

  1. >>> res = subprocess.run('exit 1',shell=True,check=False)
  2. >>> dir(res)
  3. ['__class__', '__class_getitem__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'args', 'check_returncode', 'returncode', 'stderr', 'stdout']
  4. >>> res.returncode
  5. 1
  6. >>> res.check_returncode
  7. <bound method CompletedProcess.check_returncode of CompletedProcess(args='exit 1', returncode=1)>
  8. >>> res.check_returncode()
  9. Traceback (most recent call last):
  10. File "<stdin>", line 1, in <module>
  11. File "/Users/haypin/miniconda3/envs/Py3.9.5/lib/python3.9/subprocess.py", line 460, in check_returncode
  12. raise CalledProcessError(self.returncode, self.args, self.stdout,
  13. subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1.
  14. >>>

2、

class subprocess.CompletedProcess

run() 的返回值, 代表一个进程已经结束.

args

被用作启动进程的参数. 可能是一个列表或字符串.

returncode

子进程的退出状态码. 通常来说, 一个为 0 的退出码表示进程运行正常.

一个负值 -N 表示子进程被信号 N 中断 (仅 POSIX).

stdout

从子进程捕获到的标准输出. 一个字节序列, 或一个字符串, 如果 run() 是设置了 encodingerrors 或者 text=True 来运行的. 如果未有捕获, 则为 None.

如果你通过 stderr=subprocess.STDOUT 运行进程,标准输入和标准错误将被组合在这个属性中,并且 stderr 将为 None

stderr

捕获到的子进程的标准错误. 一个字节序列, 或者一个字符串, 如果 run() 是设置了参数 encodingerrors 或者 text=True 运行的. 如果未有捕获, 则为 None.

check_returncode()

如果 returncode 非零, 抛出 CalledProcessError.

  1. >>> import subprocess
  2. >>> subprocess.run('ls -l',shell=True,capture_output=True)
  3. CompletedProcess(args='ls -l', returncode=0, stdout=b'total 0\ndrwxr-xr-x 4 haypin staff 128 8 4 2020 Proj0804\ndrwxr-xr-x 18 haypin staff 576 7 12 12:08 lift_strategy\ndrwxr-xr-x 30 root staff 960 7 17 01:50 mp4\ndrwxr-xr-x 4 haypin staff 128 9 30 2020 untitled\n', stderr=b'')
  4. >>>

3、

subprocess.PIPE

可被 Popen 的 stdinstdout 或者 stderr 参数使用的特殊值, 表示打开标准流的管道. 常用于 Popen.communicate().

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/506882
推荐阅读
相关标签
  

闽ICP备14008679号