Miq*_*uel 6 python bash exitstatus
我有一个python脚本,应该报告上一个命令的成功或失败.目前,我正在做
command && myscript "Success" || myscript "Failed"
Run Code Online (Sandbox Code Playgroud)
我想做的是能够运行取消链接的命令,如:
command; myscript
Run Code Online (Sandbox Code Playgroud)
并myscript检索$?,即存在状态.我知道我可以跑:
command; myscript $?
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是$?从python中检索的python方法.
有任何想法吗?谢谢!
更新:由于这是一个奇怪的请求,让我澄清它的来源.我有一个python脚本,它使用pushover API向我的手机发送通知.当我运行一个漫长的过程时,我将其运行为process && notify "success" || notify "failure".但有些时候我忘记这样做而只是运行这个过程.此时,我想在静态处理命令行上运行"notify",让它获取退出状态并通知我.当然我也可以在bash中实现pushover api调用,但现在它已成为一个问题,想知道如何在python中执行它
这可能是不可能的,因为脚本(任何语言的,不仅仅是 Python)的执行方式不同。试试这个:创建一个包含retcode.sh以下内容的 shell 脚本:
#!/bin/bash\necho $?\nRun Code Online (Sandbox Code Playgroud)\n\n使其可执行,然后在 shell 提示符下尝试以下操作:
\n\nfoo # Or any other non-existent command\necho $? # prints 127\nfoo\n./retcode.sh # prints 0\nRun Code Online (Sandbox Code Playgroud)\n\n我必须仔细检查这一点,但似乎所有脚本(不仅仅是 Python 脚本)都在一个单独的进程中运行,该进程无法访问“父”运行的上一个命令的退出代码壳进程。这可以解释为什么Python(据我所知)没有给你一种方法来检索上一个命令的退出代码,比如bash的\xe2 $?\x80\x94,因为它总是0,无论如何什么。
我相信你的做法command; myscript $?是实现你想要做的事情的最佳方法:让Python脚本知道上一步的退出代码。
更新:在看到您对要做什么的澄清后,我认为您最好的选择是notify稍微修改您的脚本,以便它可以采用类似-s或的选项--status(使用argparse使解析选项更容易,当然)并根据状态代码发送消息(如果代码为 0,则为“成功”;如果为其他值,则为“失败 NN”,其中 NN 是实际代码)。然后,当您command在没有小&& notify "success" || notify "failure"技巧的情况下输入时,当它仍在运行时,您可以输入notify -s $?并获取您正在寻找的通知,因为这将是您的 shell 之后运行的下一个事情command返回后运行的下一个事情。