【发布时间】:2014-10-29 09:29:18
【问题描述】:
我有一个 Python 脚本,它应该报告上一个命令的成功或失败。目前,我正在做
command && myscript "Success" || myscript "Failed"
我想做的是能够运行未链接的命令,如下所示:
command; myscript
并让myscript 检索$?,即存在状态。我知道我可以跑:
command; myscript $?
但我真正在寻找的是一种从 Python 中检索 $? 的 Python 方法。
我该怎么做?
既然这是一个奇怪的请求,让我澄清一下它的来源。我有一个 Python 脚本,它使用 pushover API 向我的手机发送通知。
当我运行一个长进程时,我以process && notify "success" || notify "failure" 运行它。但有时我忘记这样做,只是运行该过程。此时,我想在仍在处理的命令行上运行“通知”,让它获取退出状态并通知我。
当然我也可以在 bash 中实现 pushover API 调用,但现在它变成了如何在 Python 中实现它的问题。
【问题讨论】:
-
您是否尝试通过 call() 或其他方式显式“运行”
$?? -
这是一个非常好的问题。我一直在寻找,到目前为止还没有找到任何东西。您可以执行
command; SOMEVAR=$?; myscript,然后在您的脚本中检索os.environ["SOMEVAR"],但这并不比执行command; myscript $?好。如果我找到任何东西,我会回来回答。 -
@4rlekin 好主意,但它似乎不起作用。
print subprocess.call("/bin/echo $?", shell=True)总是返回 0。我怀疑这是因为该命令是在一个不知道其祖父母外壳存在状态的新外壳中执行的(原始 bash 运行 python,运行 bash) -
取决于你想用这个脚本实现什么,愚蠢的简单解决方案是已经在 bash 中编写脚本(并从内部调用所有特定于 python 的功能)
-
经过进一步测试,我认为是做不到的。放入cmets会有点太长的原因,所以我会给出它作为答案。
标签: python bash exitstatus