gpt4 book ai didi

python - 直接调用命令时 ssh 挂起,但在交互式运行时干净退出

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:39 29 4
gpt4 key购买 nike

我需要在远程机器上启动服务器并检索服务器进程正在监听的端口号。调用时,服务器将监听一个随机端口并在 stderr 上输出端口号。

我想自动化登录到远程机器、启动进程和检索端口号的过程。我写了一个名为“invokejob.py”的 Python 脚本,它位于远程机器上,用作调用作业然后返回端口号的包装器,它看起来像这样:

import re, subprocess
executable = ... # Name of executable
regex = ... # Regex to extract the port number from the output
p = subprocess.Popen(executable,
bufsize=1, # line buffered
stderr=subprocess.PIPE
)
s = p.stderr.readline()
port = re.match(regex).groups()[0]
print port

如果我以交互方式登录,此脚本有效:

$ ssh remotehost.example.com
Last login: Thu Aug 28 17:31:18 2008 from localhost
$ ./invokejob.py
63409
$ exit
logout
Connection to remotehost.example.com closed.

(注:注销成功,并没有挂掉)。

但是,如果我尝试从命令行调用它,它就会挂起:

$ ssh remotehost.example.com invokejob.py

有谁知道为什么它在第二种情况下挂起,我能做些什么来避免这种情况?

请注意,我需要检索程序的输出,所以我不能只使用 ssh“-f”标志或重定向标准输出。

最佳答案

s = p.stderr.readline()

我怀疑是上面那行。当您直接通过 ssh 调用命令时,您不会获得完整的 pty(假设是 Linux),因此没有可读取的 stderr。

当您以交互方式登录时,系统会为您设置标准输入、标准输出和标准错误,因此您的脚本可以正常工作。

关于python - 直接调用命令时 ssh 挂起,但在交互式运行时干净退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475/

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