gpt4 book ai didi

python - 如何在执行 Ruby 脚本的 Python 脚本中捕获 Ctrl+C?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:20 25 4
gpt4 key购买 nike

我正在从 Python 脚本中执行 Ruby 脚本。这是我的 Python 脚本“script007.py”的样子:

.
.
.
os.system("ruby script.rb") #executing ctrl+c here

print "should not be here"
.
.
.

我在 Ruby 脚本运行时执行 CTRL+C 但它只是停止“script.rb”并继续执行“script007.py”的其余部分。我知道这一点是因为当 Ruby 脚本停止时它会打印“不应该在这里”。

有没有一种方法可以在我的 Python 脚本中捕获 CTRL+C,即使它发生在 Ruby 脚本中?如果需要进一步解释,请告诉我。

最佳答案

在 Python 中,SIGINT 引发您可以捕获的 a special exception。但是,如果子进程使用 SIGINT 信号并对其做出响应,则它不会到达父进程。然后,您需要找到一种不同的方式让 child 与 parent 就 child 退出的原因进行沟通。这通常是退出代码。

在任何情况下,您都应该开始用 subprocess 模块中的工具替换 os.system()(这已记录在案,只需去阅读 the subprocess docs 中的内容) .您可以在检索 SIGINT 后退出时在子进程中发出特定的退出代码,并分析父进程中的退出代码。然后,您可以在子进程终止后立即有条件地退出父进程,具体取决于子进程的退出代码。

示例:您的子程序(Ruby 程序)在检索到 SIGINT 后以代码 15 退出。在父级(Python 程序)中,您将执行以下操作:

p = subprocess.Popen(...)
out, err = p.communicate(...)
if p.returncode == 15:
sys.exit(1)
print "should not be here"

关于python - 如何在执行 Ruby 脚本的 Python 脚本中捕获 Ctrl+C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28550059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com