首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python子流程check_call:如何将非0退出代码分配给变量,而不是引发异常?

在Python中,可以使用check_call函数来执行子流程,并且可以通过subprocess.CalledProcessError异常来捕获非0退出代码。然而,如果你想将非0退出代码分配给一个变量而不是引发异常,可以使用subprocess.run函数来实现。

subprocess.run函数是Python 3.5及以上版本中引入的,它可以执行子流程并返回一个CompletedProcess对象,其中包含了执行结果的各种信息,包括退出代码。

下面是一个示例代码,演示如何使用subprocess.run函数来执行子流程,并将非0退出代码分配给变量:

代码语言:txt
复制
import subprocess

try:
    result = subprocess.run(['command', 'arg1', 'arg2'], check=True, capture_output=True, text=True)
    # 如果子流程成功执行,result.returncode将为0
    # 如果子流程退出代码非0,result.returncode将为该退出代码
    # 其他执行结果信息可以通过result.stdout和result.stderr获取
except subprocess.CalledProcessError as e:
    # 如果子流程退出代码非0,可以在这里处理
    non_zero_exit_code = e.returncode
    # 其他执行结果信息可以通过e.stdout和e.stderr获取

在上面的示例中,subprocess.run函数的check参数设置为True,表示如果子流程的退出代码非0,则会引发subprocess.CalledProcessError异常。如果你想将非0退出代码分配给变量而不是引发异常,可以将check参数设置为False,然后通过result.returncode获取退出代码。

需要注意的是,subprocess.run函数的capture_output参数设置为True,表示将子流程的标准输出和标准错误输出捕获到result.stdoutresult.stderr中,以便后续处理。

此外,subprocess.run函数还有其他参数可以根据实际需求进行设置,例如text参数可以指定是否以文本模式执行子流程。

对于云计算领域的相关产品和产品介绍链接地址,可以参考腾讯云的官方文档和网站,具体推荐的产品和链接地址需要根据实际情况进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python与s

返回值:00值 阻塞父进程,直到该函数结束 结束条件:命令执行完成或超时 用于代替 os.system() 不支持管道 check_call(*popenargs, **kwargs)...功能:检查在进程中运行命令的执行情况 返回值:0。...(命令退出码为0时,返回0;否则,无返回值,直接引发CalledProcessError异常) 阻塞父进程,直到该函数结束 结束条件: 命令执行完成 或 超时 不支持管道 check_output(*popenargs...input getoutput(cmd) 功能: 获取进程中执行命令的输出结果 返回值:执行命令的结果 不阻塞父进程 不支持管道 命令执行错误时,不引发异常 getstatusoutput(cmd...) 功能:获取进程中执行命令的返回码和结果 返回值:(retcode, stdout)元组 不阻塞父进程 不支持管道 命令执行错误时,不引发异常 run(args, *, stdin = None

90810

python中的subprocess

python2.7 源码中的注释(由于能力有限,翻译的不太准确): 这个模块允许您开启进程、连接输入、输出和错误的管道,并获取他们的返回代码。...如果 cwd 不为None,进程将在执行前切换到 cwd指定的目录 如果 env 不为空,为新进程定义环境变量 如果 universal_newlines 为 True, 则文件对象标准输出、标准错误输出以文本文件形式打开...等待命令完成.如果退出码是0则返回,如果是其他则抛出           CalledProcessError错误,该CalledProcessError 对象就会有返回返回码属性     这些参数相对于...如果退出码是非0则会抛出CalledProcessError。    ...最常见的异常是OSError,比如:执行一个不存在的文件,应用程序会抛出OSError异常 如果Popen被无效的参数调用就会抛出‘ValueError’ 如果check_call() and check_output

1.6K30

Python调用外部系统命令

本文分析python调用外部系统命令主要从两个方面考虑:1、是不是可以返回命令执行结果码,因为大部分场景都需要通过判断调用命令是执行成功还是失败。2、是不是可以获取命令执行结果。...preexec_fn 只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在进程运行之前被调用cwd设置进程当前目录env env是字典类型,用于指定子进程的环境变量...默认值为None,表示进程的环境变量将从父进程中继承。Universal_newlines 不同操作系统下,文本的换行符是不一样的。...如:windows下用’/r/n’表示换,Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。...如果调用命令执行成功,返回结果码0,如果执行失败,抛出CalledProcessError.异常

24820

Python Subprocess库详解

简介 Subprocess库是Python中用于创建和管理进程的标准库。它提供了一个强大灵活的接口,使得你可以在Python中启动新的进程、连接它们的输入和输出,并与它们进行交互。...stdout=subprocess.PIPE表示将进程的标准输出捕获到父进程。 处理错误 如果子进程返回零的退出码,subprocess.run()将引发CalledProcessError异常。...超时处理 在实际应用中,我们可能希望设置进程的最长运行时间,以避免因子进程无法正常退出导致父进程一直等待。...使用Shell命令 有时候我们可能需要在进程中执行Shell命令,不是直接运行可执行文件。...实时获取输出 有时候我们希望实时获取进程的输出,不是等到它完成。

1.5K21

Python模块之subprocess

二 基础知识 Python2.4引入subprocess模块来管理进程,可以像Linux 系统中执行shell命令那样fork一个进程执行外部的命令,并且可以连接进程的output/input...,正常情况下返回0,当检查退出信息,如果returncode不为0,则触发异常subprocess.CalledProcessError,该对象包含有returncode属性,应用程序中可用try....../Versions/2.7/lib/python2.7/subprocess.py", line 540, in check_call raise CalledProcessError(retcode...2) 如何处理函数返回的信息(命令执行的结果或者错误信息) 3) 当进程执行的失败也即returncode不为0时,父进程如何处理后续流程?...当shell=True, 它将args看作是一个字符串,不是一个序列。在Unix系统,且 shell=True时,shell默认使用 /bin/sh.

1.9K10

python的subprocess模块

check: 如果check参数的值是True,且执行命令的进程以0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdout和stderr...()函数返回的是命令执行的状态码,不是CompletedProcess类实例,所以对于它们而言,stdout和stderr不适合赋值为subprocess.PIPE; ​ check_output()...如果stderr灭有被捕获的话,它的值就为None ​ check_returncode(): 如果returncode是一个0值,则该方法会抛出一个CalledProcessError异常。...这样能保证进程正常退出避免出现僵尸进程。...进程自动结束 print(proc.returncode) 0 1.subprocess模块, res = os.system('dir') 打印到屏幕,res为00 os.popen('dir

3K20

PEP 380--生成器的语法

导语: PEP(Python增强提案)几乎是 Python 社区中最重要的文档,它们提供了公告信息、指导流程、新功能的设计及使用说明等内容。...如果发送的值不是 None,则调用迭代器的 send() 方法。如果调用引发了 StopIteration,则恢复委托生成器。任何其它异常都会传递给委托生成器。...生成器里的 return expr 导致从生成器退出引发 StopIteration(expr)。...对引用计数型的 Python 实现的考虑,导致了应该显式地结束的结论,以便在所有类型的 Python 实现上,显式地结束迭代器与重构的迭代器,能具有相同的效果。...这要求在关闭生成器后、关闭一个委托生成器时,该委托生成器可以被恢复,不是重新引发 GeneratorExit。

81310

Python中的用户定义异常与NZEC错误

前提条件- 本文是对异常处理的扩展。 当代码出错时,Python引发错误和异常,这可能导致程序突然停止。Python还通过try-except提供了异常处理方法。...尽管不是强制性的,但大多数异常的名称都以“错误”结尾,类似于python中标准异常的命名。...运行时错误是一个类,是一种标准异常,当生成的错误不属于任何类别时会引发此错误。该程序说明了如何将运行时错误用作基础类,将网络错误用作派生类。...顾名思义,NZEC(退出代码)发生在您的代码未能返回0时。当代码返回0时,表示它已成功执行,否则将根据错误类型返回其他一些数字。...3、作为在线平台,使用与您的输出与指定输出完全匹配的计算机代码测试程序。 4、当您的程序执行基本的编程错误(例如除以0)时,也会显示此类错误。 5、检查变量的值,它们很容易受到整数流的影响。

1.6K20

Python中的用户定义异常与NZEC错误

前提条件- 本文是对异常处理的扩展。 当代码出错时,Python引发错误和异常,这可能导致程序突然停止。Python还通过try-except提供了异常处理方法。...尽管不是强制性的,但大多数异常的名称都以“错误”结尾,类似于python中标准异常的命名。...运行时错误是一个类,是一种标准异常,当生成的错误不属于任何类别时会引发此错误。该程序说明了如何将运行时错误用作基础类,将网络错误用作派生类。...顾名思义,NZEC(退出代码)发生在您的代码未能返回0时。当代码返回0时,表示它已成功执行,否则将根据错误类型返回其他一些数字。...作为在线平台,使用与您的输出与指定输出完全匹配的计算机代码测试程序。 当您的程序执行基本的编程错误(例如除以0)时,也会显示此类错误。 检查变量的值,它们很容易受到整数流的影响。

12520

Python中的用户定义异常与NZEC错误

前提条件- 本文是对异常处理的扩展。 当代码出错时,Python引发错误和异常,这可能导致程序突然停止。Python还通过try-except提供了异常处理方法。...尽管不是强制性的,但大多数异常的名称都以“错误”结尾,类似于python中标准异常的命名。...运行时错误是一个类,是一种标准异常,当生成的错误不属于任何类别时会引发此错误。该程序说明了如何将运行时错误用作基础类,将网络错误用作派生类。...顾名思义,NZEC(退出代码)发生在您的代码未能返回0时。当代码返回0时,表示它已成功执行,否则将根据错误类型返回其他一些数字。...作为在线平台,使用与您的输出与指定输出完全匹配的计算机代码测试程序。 当您的程序执行基本的编程错误(例如除以0)时,也会显示此类错误。 检查变量的值,它们很容易受到整数流的影响。

1.5K10

Python 的上下文管理器是怎么设计的?

Raymond 令人信服地指出,在宏中藏有流程控制会让你的代码变得难以捉摸,我觉得他的论点不仅适用于 C,同样适用于 Python。...即便你写的代码没有 bug,KeyboardInterrupt 异常仍然会导致程序在任意两个虚拟机操作码之间退出。)...问题是在 PEP-310 中,EXPR 的调用结果直接分配给 VAR,然后 VAR 的__exit__() 方法会在 BLOCK1 退出时被调用。...解释器会按照顺序查找相关的方法(__exit__、__enter__),如果没有找到,将引发 AttributeError。类似地,如果任何一个调用引发异常,其效果与上述代码中的效果完全相同。...抽象对象C API引发TypeError不是AttributeError,这只是历史的一个偶然,不是经过深思熟虑的设计决策11。

62200

Python模块学习:subprocess模块详解

subprocess.check_output()Python 2.7中新增的的函数。执行指定的命令,如果执行状态码为0则返回命令执行结果,否则抛出异常。...check: 如果check参数的值是True,且执行命令的进程以0状态码退出,则会抛出一个CalledProcessError的异常,且该异常对象会包含 参数、退出状态码、以及stdout和stderr...()函数返回的是命令执行的状态码,不是CompletedProcess类实例,所以对于它们而言,stdout和stderr不适合赋值为subprocess.PIPE;check_output()函数默认就会返回命令执行结果...如果stderr灭有被捕获的话,它的值就为Nonecheck_returncode(): 如果returncode是一个0值,则该方法会抛出一个CalledProcessError异常。...cwd: 如果该参数值不是None,则该函数将会在执行这个子进程之前改变当前工作目录。env: 用于指定子进程的环境变量,如果env=None,那么子进程的环境变量将从父进程中继承。如果env!

42240

从yield 到yield from再到python协程

如果发送的值不是None,那么会调用生成器的send方法,如果调用的方法抛出StopIteration异常,那么委派生成器恢复运行,任何其他异常都会向上冒泡,传给委派生成器 生成器退出时,生成器(或生成器...将yield重新定义为表达式,不是语句。当前的yield语句将成为一个yield值表达式,其值将被丢弃。...为generator-iterators 添加了一个新的方法throw(), 它在生成器暂停时引发异常,并返回生成器产生的下一个值,如果生成器退出不产生另一个值,则引发StopIteration(如果生成器没有捕获传入的异常...如果一个生成器引发了任何其他异常,则会传给他的调用者 ,如果生成器,由于异常退出或者已经正常退出,那么close()不执行任何操作。...如果生成器已经处于关闭状态,throw() 只会引发它传递的异常不执行任何生成器的代码 generator.throw:会让生成器在暂停的yield表达式处抛出指定的异常,如果生成器处理了抛出的异常

95140

Python内置异常类型全面汇总

内置异常基类 在 Python 中,所有异常必须为一个派生自 BaseException 的类的实例。 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称。...下列异常主要被用作其他异常的基类。 BaseException: 所有异常的基类 Exception(重点掌握) 所有内置的系统退出异常都派生自此类。 所有用户自定义异常也应当没打算自此类。...ArithmeticError 此基类用于派生针对各种算术类错误引发的内置异常: OverflowError, ZeroDivisionError, FloatingPointError。...LookupError 此基类用于派生当映射或序列所使用的键或索引无效时引发异常: IndexError, KeyError 内置异常的层次结构 BaseException 所有异常的基类...进程上的操作失败 | +-- ConnectionError 与连接相关的异常的基类 | | +-- BrokenPipeError 在已关闭写入的套接字上写入

1.5K10

python调用shell命令小结

在写python脚本的时候,经常需要调用系统命令,常用的python调用系统命令的方法主要有subprocess.call和os.popen。...默认情况下subprocess.call的方法结果是返回值,即1或0os.popen则是命令运行的结果,可以用readlines(读取所有行,返回数组)或者read(读读取所有行,返回str)来读取...Popen.poll 检查进程是否结束,并返回returncode Popen.wait等待进程是否结束,并返回retrurncode 比如check_call的sample: import subprocess...        raise CalledProcessError(retcode, cmd)  #可以抛出异常     return 0 def check_output(*popenargs, **...可以对上面的代码进行组合 # -*- coding: utf8 -*- import exceptions import subprocess import traceback class CalledCommandError

1.3K20

python异常报错详解

异常Exception 所有内置的系统退出异常都是从这个类派生出来的。所有用户定义的异常也应该从此类派生。 更改版本2.5:更改为继承BaseException。...当内置函数input()或raw_input()正在等待输入时,键入的中断也会引发异常异常继承 BaseException不被意外地捕获Exception并因此阻止解释器退出代码被捕获 。...实例具有code设置为建议的退出状态或错误消息(默认为None)的属性。此外,这种异常直接来自于BaseException不是StandardError,因为它在技术上不是错误。..._exit()如果绝对有必要立即退出(例如,在调用后的进程os.fork())中,则可以使用该函数。...唯一的例外来自继承BaseException,不是StandardError 或Exception使得它不会意外地被映入代码捕获 Exception。这允许异常正常传播并导致解释器退出

4.6K20
领券