【问题标题】:stdout from putty in text widget文本小部件中腻子的标准输出
【发布时间】:2014-01-30 22:27:03
【问题描述】:

我正在使用 putty 连接服务器并执行命令,但我不知道如何将命令输出重定向到文本小部件。

exec patchtoputty/putty.exe -ssh myserver -pw mypass -m mycommand

通常这应该(?)有效:

catch {exec patchtoputty/putty.exe -ssh myserver -pw mypass -m mycommand} results
.text insert 1.0 $results

但在这种情况下,我正在执行具有自己的终端窗口的 putty(或例如 cygwin)命令。

问候, 卢卡斯

【问题讨论】:

    标签: tcl putty


    【解决方案1】:

    获取窗口的输出并将其插入文本小部件是非常棘手的;您必须定期抓取屏幕并 OCR 结果或其他内容。可笑。

    但是对于 putty,最好的办法是改用同一系列的 plink.exe(= “Putty LINK”)。它基本上是腻子,但没有窗口的东西,并且能够在管道中很好地运行。它采用与 putty 相同的选项,因此修改代码应该非常容易。

    catch {exec wherever/plink.exe -ssh myserver -pw mypass -m mycommand} results
    .text insert 1.0 $results
    

    (构建自己的腻子?只要确保同时构建 plink。)

    【讨论】:

    • plink 运行良好,但在我的情况下,当我想使用远程命令“-m mycommand”执行命令时,我有一个答案“bash: command not found”。当我在登录服务器(而不是通过远程命令)后执行相同的命令时,它运行良好。我认为 plink 在使用远程命令时更改环境有问题?
    • @lucas 远程命令的运行是一个复杂的话题(tl;dr:有很多事情可能会出错,还有很多事情可以调整)自从我查看 plink 的详细信息以来已经有一段时间了,但是当转到任何 POSIX-ish 系统时,您可以在运行命令之前使用 /usr/bin/env FOO=BAR mycommand 设置变量。这可能会有所帮助。 (或者可能不是;毕竟我已经有一段时间没有手动使用 plink 了。)
    • 我认为问题在于我尝试执行的命令特定于安装在服务器上的软件。 Plink 正在连接服务器并在软件响应之前执行命令,这就是他无法识别命令的原因。也许有一种方法可以通过 plink 连接并在第二步中执行命令(而不是在一行中)?也许期望会有所帮助?但即便如此,我还是无法将其包装到 .exe 文件(未找到包消息),还是有其他更简单的方法?
    • @lucas 对我来说,这听起来更像是您缺少某种环境设置(特殊的PATH?),它是在您以交互方式登录时设置的,但在您使用“远程运行命令”模式。不幸的是,这让我们回到“有很多可能出错的事情”。
    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2020-12-13
    相关资源
    最近更新 更多