我有一些相对较大的程序,我曾经以每个功能只打印一行输出的方式将其进度打印到控制台(它显示"做某事......"同时功能正在运行(有时它会显示百分比条)并转向"做某事...完成"当功能成功完成时。我为我申请了' \ r',线路清关等进度条看起来不错。但是,当发生错误时,消息继续在同一行,我想避免。例如我有一个代码:
import os, sys, subprocess
def some_function(filename):
print('Doing something... ', end = '')
sys.stdout.flush()
with open(os.devnull, 'wb') as devnull:
check = subprocess.call(['ls', filename], stdout = devnull)
if check != 0:
sys.exit(1)
print('Done')
some_function('some.file')
它产生以下输出(取决于是否存在错误):
Doing something... Done
或
Doing something... ls: some.file: No such file or directory
我想在错误的情况下看到:
Doing something...
ls: some.file: No such file or directory
如果出现错误,是否有一些通用的方法在输出中引入换行符(也可能是某些内部或用户定义的异常)?
答案 0 :(得分:4)
call
不会引发异常,因此您可以使用stderr捕获子进程的错误:
import os, sys, subprocess
def some_function(filename):
print('Doing something... ', end='')
sys.stdout.flush()
with open(os.devnull, 'wb') as devnull:
check = subprocess.Popen(['ls', filename], stdout = devnull, stderr=subprocess.PIPE)
stdout, stderr = check.communicate()
if stderr:
print("\n{}".format(stderr.decode("utf-8")))
sys.exit(1)
print('Done')
答案 1 :(得分:1)
try:
do stuff that might cause an error
except:
print()
raise
如果在try
块内引发错误,则会打印一个新行,然后重新引发捕获的异常。
修改的
正如评论中指出的那样,在这种情况下,错误消息不是由引发的异常生成的,所以我按照Padraic的回答。