如何在Python中返回状态码而不实际退出进程?



我试图返回状态码而不退出进程我的剧本。是否有一个与sys.exit()等价且不停止执行的?

我希望发生什么:

如果没有引发异常,状态码默认为0。对于较小的例外,我想返回状态码1,但保持进程运行,除非有更严重的错误退出进程并返回状态码2和sys.exit(2)。在我的例子中,我循环遍历一堆PDF文件,如果一个文件由于某种原因没有被匿名,我想在循环遍历其余文件时返回状态码1。

也就是说,状态码应该对应于:
  • 0 - SUCCESS:所有文件已成功匿名
  • 1 -警告:至少有一个文件没有被匿名
  • 2 - ERROR:严重错误,进程中断

为清楚起见:这里的状态码是指Bash命令echo $?在执行脚本后返回的内容。

我做了什么:我已经尝试使用sys.exit(1)来处理轻微的异常,但它会自动停止执行,如库文档中所述。

总结代码片段:

对于给定的main.py:

import sys
import os
def anonymiser(file) -> Boolean :
# Returns True if successfully anonymises the file, False otherwise
...
def process_pdf_dir():
for file in os.listdir('pdf_files/'):
if file.endswith('.pdf'):
if anonymiser(file) == False:
'''
Here goes the code to change status code to 1 
but keeps looping through the rest of the files
unlike `sys.exit(1)` that would stop the execution.
'''
if criticalError = True:
sys.exit(2)             
if __name__ == '__main__':
process_pdf_dir()

在终端上调用脚本后,像这样回显其状态:

$ python main.py
$ echo $?

如果是,至少有一个文件没有被匿名化:

  • 预期输出(如果没有严重错误):

    1
    
  • 预期输出(如果发生严重错误):

    2
    
  • 当前输出(如果没有严重错误):

    0
    
  • 当前输出(如果严重错误):

    2
    

希望这足够清楚。任何帮助都将非常感激。谢谢。

等到循环结束时返回1退出代码。我想这样做:

def process_pdf_dir() -> int:
ret = 0
for file in os.listdir('pdf_files/'):
if file.endswith('.pdf'):
if not anonymiser(file):
# remember to return a warning
ret = 1
if criticalError:
# immediately return a failure
return 2
return ret
if __name__ == '__main__':
sys.exit(process_pdf_dir())

If "critical error"包括未捕获的异常,可以放在process_pdf_dir之外,例如:

if __name__ == '__main__':
try:
sys.exit(process_pdf_dir())
except:
sys.exit(2)

相关内容

  • 没有找到相关文章

最新更新