Red*_*son 3 ruby python scripting ctrl
我正在从 Python 脚本中执行 Ruby 脚本。这是我的 Python 脚本“script007.py”的样子:
.
.
.
os.system("ruby script.rb") #executing ctrl+c here
print "should not be here"
.
.
.
Run Code Online (Sandbox Code Playgroud)
我在 Ruby 脚本运行时执行CTRL+C但它只是停止“script.rb”并继续执行“script007.py”的其余部分。我知道这是因为它在 Ruby 脚本停止时打印“不应该在这里”。
有没有办法可以在我的 Python 脚本中捕获CTRL+ C,即使它发生在 Ruby 脚本中?如果需要进一步解释,请告诉我。
在 Python 中,SIGINT 会引发一个您可以捕获的特殊异常。但是,如果子进程使用 SIGINT 信号并对其做出响应,则它不会到达父进程。然后,您需要找到一种不同的方式来在孩子与父母之间就孩子退出的原因进行沟通。这通常是退出代码。
在任何情况下,你应该开始更换os.system()与工具subprocess模块(这是记录,只是去和阅读关于这个的subprocess文档)。您可以在检索 SIGINT 后退出时在子级中发出某个退出代码,并分析父级中的退出代码。然后,您可以在子进程终止后立即有条件地退出父进程,具体取决于子进程的退出代码是什么。
示例:您的孩子(Ruby 程序)在检索 SIGINT 后以代码 15 退出。在父级(Python 程序)中,您将执行以下操作:
p = subprocess.Popen(...)
out, err = p.communicate(...)
if p.returncode == 15:
sys.exit(1)
print "should not be here"
Run Code Online (Sandbox Code Playgroud)