gpt4 book ai didi

python - 如何检查python脚本是否正在通过ssh远程调用

转载 作者:太空狗 更新时间:2023-10-29 11:31:49 27 4
gpt4 key购买 nike

所以我正在编写一个命令行实用程序,但遇到了一个我很好奇的问题。

该实用程序可以使用文件参数调用,也可以从 sys.stdin 中读取。最初我使用 sys.stdin.isatty() 来确定数据是否正在通过管道传输,但是,我发现如果我通过 ssh server utility 远程调用该实用程序, sys.stdin.isatty() 将返回 false,尽管事实上没有实际数据被管道输入。

作为解决方法,我使用 - 作为强制从标准输入读取的文件参数(例如:echo "data_here"| utility -f -),但我我很想知道是否有可靠的方法来区分从进程获取数据的管道和仅因为调用是通过 ssh 而打开的管道。

系统编程不是我的强项,所以我很感激能从你们那里得到的任何帮助。

最佳答案

您可以通过检查您的环境来判断您是否通过 SSH 被调用。如果您通过 SSH 连接被调用,环境变量 SSH_CONNECTIONSSH_CLIENT 将被设置。您可以测试它们是否设置为:

if "SSH_CONNECTION" in os.environ:
# do something

另一种选择,如果您只想坚持使用 sys.stdin.isatty() 的原始方法,则可以为 SSH 连接分配一个伪 tty。通常,如果您只是通过 SSH 进入交互式 session ,SSH 默认会执行此操作,但如果您提供命令则不会。但是,您可以通过传递 -t 标志在提供命令时强制它这样做:

ssh -t server utility

但是,我要提醒您不要做任何这些事情。如您所见,尝试根据标准输入是否是 TTY 来检测您是否应该接受输入可能会导致一些令人惊讶的行为。如果用户想要一种在调试某些内容时以交互方式向您的程序提供输入的方法,这也可能会导致用户感到沮丧。

添加显式 - 参数的方法使您获得的行为更加明确且不那么令人惊讶。一些实用程序也只是使用缺少任何文件参数来表示从 stdin 读取,因此这也是一个不那么令人惊讶的替代方案。

关于python - 如何检查python脚本是否正在通过ssh远程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35352921/

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