我想stdout
在python(3)脚本中捕获shell命令的流,并能够同时检查shell命令的返回代码(如果它返回错误)(即,如果它的返回代码是不为0)。
subprocess.check_output
似乎是执行此操作的适当方法。从subprocess
的手册页:
check_output(*popenargs, **kwargs)
Run command with arguments and return its output as a byte string.
If the exit code was non-zero it raises a CalledProcessError. The
CalledProcessError object will have the return code in the returncode
attribute and output in the output attribute.
尽管如此,当失败时,我仍然无法从shell命令获取返回代码。我的代码如下所示:
import subprocess
failing_command=['ls', 'non_existent_dir']
try:
subprocess.check_output(failing_command)
except:
ret = subprocess.CalledProcessError.returncode # <- this seems to be wrong
if ret in (1, 2):
print("the command failed")
elif ret in (3, 4, 5):
print("the command failed very much")
这段代码在处理异常本身时引发了一个异常:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
AttributeError: type object 'CalledProcessError' has no attribute 'returncode'
我承认我不知道我哪里错了。
要同时获取过程输出和返回的代码:
from subprocess import Popen, PIPE
p = Popen(["ls", "non existent"], stdout=PIPE)
output = p.communicate()[0]
print(p.returncode)
subprocess.CalledProcessError
是一类。要访问,请returncode
使用异常实例:
from subprocess import CalledProcessError, check_output
try:
output = check_output(["ls", "non existent"])
returncode = 0
except CalledProcessError as e:
output = e.output
returncode = e.returncode
print(returncode)
问题内容: 我正在使用一个API,该API声称如果成功则返回true,如果失败则返回false。但是,它也声称如果失败,则抛出不同的异常。它如何返回false并引发异常? 问题答案: 不能从单个函数调用中引发异常并返回值。 如果发生错误,它可能会执行类似返回的操作,但是如果输入无效,则会引发异常。 编辑:PaulPRO发布了一个(现已删除)答案,指出从 技术上讲, 有可能在返回当前值时在另一个线程
问题内容: 我正在使用pythons子进程模块中的subprocess.check_output执行ping命令。这是我的做法: 它引发一个CalledProcessError并说输出是该函数的参数之一。谁能帮助我如何阅读该输出。我想将输出读取为字符串并进行解析。举例来说,如果ping返回 100%丢包 我需要捕捉一下。如果还有其他更好的方法,请提出建议。谢谢。 问题答案: 在参数列表中,每个条目
我希望在数据库中找不到该项时出现异常
问题内容: 我想知道只有Integer.parseInt(无论如何)都不会失败的情况下才能做些什么。 更具体地说,我有一个jTextArea用户指定值,由换行符分隔。 我想检查每一行,看看是否可以转换为整数。 想出了类似的东西,但是不起作用: 任何帮助表示赞赏。 问题答案:
问题内容: 在Java线程中,“运行”方法不能引发“检查的异常”。我在Core Java(第1卷)书中遇到了这个问题。有人可以解释其背后的原因吗? 问题答案: 有人可以解释其背后的原因吗? 是的,因为您抛出的任何异常都会被JVM仔细忽略。因此,将其抛出可能是一个错误(除非您对该线程具有特定的异常处理程序,请参阅有关该文档的文档)。没有理由煽动潜在的错误行为。 或者举个例子。 编辑 为什么父线程不能
问题内容: 我正在使用python脚本作为水动力代码的驱动程序。是时候运行模拟了,我用来运行代码,将和的输出收集到中,然后我可以打印(并保存到日志文件中)输出信息,并检查是否有错误。问题是,我不知道代码是如何进行的。如果我直接从命令行运行它,它将为我提供有关其迭代次数,时间,下一时间步长等的输出。 有没有办法既存储输出(用于日志记录和错误检查),又产生实时流输出? 我的代码的相关部分: 最初,我是