gpt4 book ai didi

python - SSH 在短时间后超时的选项? ClientAlive 和 ConnectTimeout 似乎没有做我需要他们做的事情

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:21 25 4
gpt4 key购买 nike

我正在通过 SSH 发送命令。这个特定的命令恰好告诉机器重新启动。不幸的是,这会挂起我的 SSH session 并且不会返回,因此我的脚本无法继续转发到其他任务。

我已经尝试了各种修改命令本身的组合,以包括“退出”和/或转义命令,但在所有这些情况下,机器都不会在重新启动和关闭 SSH session 的命令时启动。我也尝试过 SSH 的 ConnectTimeout 和 ClientAlive 选项,但它们似乎使重启命令被忽略。

我在这里缺少一些明显的命令吗?

最佳答案

好吧,没有人专门针对 SSH 发布任何答案,因此我将提出一个 SIGALRM 解决方案,如下所示: Using module 'subprocess' with timeout

class TimeoutException(Exception): # Custom exception class
pass

def TimeoutHandler(signum, frame): # Custom signal handler
raise TimeoutException

# Change the behavior of SIGALRM
OriginalHandler = signal.signal(signal.SIGALRM,TimeoutHandler)

# Start the timer. Once 30 seconds are over, a SIGALRM signal is sent.
signal.alarm(30)

# This try/except loop ensures that you'll catch TimeoutException when it's sent.
try:
ssh_foo(bar) # Whatever your SSH command is that hangs.
except TimeoutException:
print "SSH command timed out."

# Reset the alarm stuff.
signal.alarm(0)
signal.signal(signal.SIGALRM, OriginalHandler)

这基本上是设置一个 30 秒的计时器,然后尝试执行您的代码。如果它未能在时间用完之前完成,则会发送一个 SIGALRM,我们会捕获它并将其转换为一个 TimeoutException。这迫使您进入 except block ,您的程序可以在其中继续。

关于python - SSH 在短时间后超时的选项? ClientAlive 和 ConnectTimeout 似乎没有做我需要他们做的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921527/

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