我正在寻找R /等效的linux/POSIX exit(n),它将使用退出代码n停止进程,向父进程发出错误信号.R有这样的设施吗?
文档说调用sys.exit()会引发一个SystemExit异常,该异常可以在外层捕获.我有一种情况,我想明确地,毫无疑问地退出测试用例,但是unittest模块捕获SystemExit并阻止退出.这通常很好,但我试图处理的具体情况是我们的测试框架检测到它被配置为指向非测试数据库的情况.在这种情况下,我想退出并阻止运行任何进一步的测试.当然,由于unittest陷入了SystemExit的困境并继续开心,它正在挫败我.
到目前为止我唯一想到的选择是使用ctypes或者类似的东西来直接调用exit(3),但这对于一些非常简单的东西来说似乎是一个相当糟糕的黑客.
我有一个像C#这样的控制台程序
Class Program
{
static void main(string args[])
{
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在main()退出后做一些事情.我试图为类程序编写一个解构函数,但它永远不会被击中.
有人知道怎么做.
非常感谢
我需要用来defer
释放使用C
库手动创建的分配,但我还需要os.Exit
在某些时候使用非0状态.棘手的部分是os.Exit
跳过任何延迟指令:
package main
import "fmt"
import "os"
func main() {
// `defer`s will _not_ be run when using `os.Exit`, so
// this `fmt.Println` will never be called.
defer fmt.Println("!")
// sometimes ones might use defer to do critical operations
// like close a database, remove a lock or free memory
// Exit with status code.
os.Exit(3)
}
Run Code Online (Sandbox Code Playgroud)
游乐场:从https://gobyexample.com/exit窃取http://play.golang.org/p/CDiAh9SXRM
那么如何退出一个尊重已宣布defer
呼叫的go计划呢?还有其他选择os.Exit
吗?
我正在推出一个使用的程序 subprocess.Popen(cmd, shell=TRUE)
我对Python很新,但感觉就像应该有一些api让我做类似的事情:
subprocess.Popen(cmd, shell=TRUE, postexec_fn=function_to_call_on_exit)
Run Code Online (Sandbox Code Playgroud)
我这样做是为了function_to_call_on_exit
能够在知道cmd退出的基础上做一些事情(例如保持当前正在运行的外部进程数的计数)
我假设我可以相当简单地将子进程包装在一个将线程与Popen.wait()
方法结合起来的类中,但是因为我还没有在Python中进行线程化,而且看起来这可能是一个常见的API存在,我想我会先尝试找一个.
提前致谢 :)
我想写这样的代码:
command="some command"
safeRunCommand $command
safeRunCommand() {
cmnd=$1
$($cmnd)
if [ $? != 0 ]; then
printf "Error when executing command: '$command'"
exit $ERROR_CODE
fi
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码并没有按照我想要的方式运行.哪里弄错了?
我一直试图弄清楚如何在Linux内部使用fork-exec机制.根据计划,一切都在继续,直到一些网页开始让我困惑.
据说,一个子进程应该严格使用_exit()
而不是简单exit()
或正常的返回main()
.
据我所知,Linux shell fork-execs每个外部命令; 假设我上面说的是真的,结论是这些外部命令和Linux shell中发生的任何其他执行都不能正常返回!
维基百科和其他一些网页声称,我们必须使用_exit()
它来防止子进程导致删除父进程的临时文件,同时可能会发生stdio缓冲区的双重刷新.虽然我理解前者,但我没有任何线索如何双重刷新缓冲区可能对Linux系统有害.
我花了一整天的时间......感谢任何澄清.
是否可以使用消息退出错误,而不使用if语句?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"
Run Code Online (Sandbox Code Playgroud)
当然,右侧||
不起作用,只是为了让您更好地了解我想要完成的任务.
实际上,我甚至不介意它将退出哪个ERR代码,只是为了显示消息.
编辑
我知道这会有效,但如何numeric arg required
在我的自定义消息后抑制显示?
[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
Run Code Online (Sandbox Code Playgroud) 我使用一个使用bash源功能扩展的脚本;
#!/bin/bash
source someneatscriptthatendsprematurely.sh
Run Code Online (Sandbox Code Playgroud)
我希望能够从该脚本返回,而不会破坏主脚本.
使用退出中断主脚本,返回仅在函数中有效,并且试验$(退出1)似乎也不起作用.
那么,是否可以在不破坏主bash的情况下返回子bash脚本?
任何帮助赞赏!