问题标签 [pty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
581 浏览

c - 主 pty 如何检测从 tty 是否已退出?

我正在使用 BSD 样式的 pty/tty 对来实现运行子 shell。当用户退出子 shell 时,如何在主进程中检测到发生这种情况?我正在使用 select(nfds, &read_fds, NULL, NULL, &timeout); 在主端的 read_fds 中设置主 pty 文件描述符。

0 投票
3 回答
1388 浏览

c - 从主端更改伪 tty 回显模式

在 linux 上,我在 master 端打开了一个伪 tty。虽然从属端没有客户端,但伪 tty 似乎在呼应我写给他的所有内容,这不是我所期望的。考虑以下代码:

当我运行这个程序时,我希望 read 调用会阻塞,但它会立即返回并且 readbuf 内容是 C。我怎样才能改变这种行为?当从端没有打开时,我希望主端写的字符要么消失,要么被从端读取。

更改主侧属性是正确的方法吗?

0 投票
2 回答
7365 浏览

ruby - Ruby - Expect 和 Pty 的问题

我正在尝试编写一个 Ruby 脚本,它将通过 ssh 连接到服务器,运行给定的命令,并从中获取输出。到目前为止,这是我所得到的,主要改编自Programming Ruby书:

不幸的是,我得到的只是这个:

知道我做错了什么以及如何减轻这种情况吗?

0 投票
1 回答
3101 浏览

python - Python os.forkpty 为什么我不能让它工作

0 投票
1 回答
1441 浏览

linux - xterm 的 -S 选项(传递伪终端名称和描述符)在 Linux 中如何工作?

问候,在将旧的 Solaris 2.4 代码移植到 CentOS 5.3 时,我遇到了一个类似的调用

其中 %s 是两个字符的数字序列 XX,例如 00、01,%d 是数字文件描述符。这显然是一种告诉 xterm 使用 /dev/ttypXX (伪终端从站)的方法,但代码似乎并不打扰打开相应的主站,而是调用 pipe(2) 并将write fd 作为 %d 替换传递以上。在 Solaris 上,从 spawner 写入此 write fd 会导致输出出现在 xterm 子项中。顺便说一句,在 strace(1) 中,我没有看到任何尝试打开 /dev 下的任何内容。

0 投票
1 回答
2358 浏览

ssh - 在“ssh”的 popen() 上调用 fgets() 正在刷新调用进程的标准输入的开头(ptty 问题)

我现在已经将其缩减为一个最小的测试用例。到目前为止,我已经能够确定这是与 ssh 管道出现的伪终端有关的问题。在 ssh 调用中添加“-t -t”可以改善问题,因为现在需要再次调用 fgets() 才能导致问题。我怀疑 ssh 命令的 stderr 输出以某种方式解决了这个问题,现在我已将 stderr 重定向到 ssh 代码中的 stdout 以执行。我确实想知道“tcgetattr:无效参数”错误是否是问题的一部分,但我不确定如何摆脱它。它似乎来自存在的 -t -t 。我相信 -t -t 正朝着正确的方向发展,但我必须以某种方式为 stderr 设置伪终端,也许测试会正常工作?

生成文件:

test.c 源文件:

这表明它正在运行:

这表明它以失败的方式运行:

0 投票
1 回答
1681 浏览

c - 如何在不修改程序的情况下从标准输出捕获无缓冲的输出?

我正在编写一个用于运行程序的实用程序,我需要从程序中捕获无缓冲的标准输出和标准错误。我需要:

  • 将 stdout 和 stderr 捕获到单独的文件中。
  • 输出不需要缓冲(或行缓冲)。
  • 无需修改正在运行的程序的源代码。

问题是,当管道输出到文件时,stdout 流变成块缓冲而不是行缓冲。如果程序崩溃,输出永远不会被刷新,并且是空白的。所以我需要在没有缓冲(或使用行缓冲)的情况下捕获标准输出。

我认为这可以用 pty 来完成,但我很难找到任何完全符合我要求的示例(大多数忽略 stderr)。事实上,我不确定我是否在 C 中找到了任何 pty 示例。大多数使用更高级别的接口,如 Python 的 pty 和 subprocess 模块。

任何人都可以提供帮助(使用代码片段或链接)吗?任何帮助,将不胜感激。

编辑:我想我已经解决了。以下两个链接非常有帮助。

我的代码可用作存储库:

0 投票
3 回答
2097 浏览

bash - 通过标准输入的箭头键

我正在尝试通过标准输入向 bash 发送箭头键:

猫 | /bin/bash

然后我输入“echo hi”=>“hi”出现在控制台上(当然没有引号)然后我按向上箭头键 => ^[[A command not found 出现

是否可以通过 stdin 向程序发送箭头键?

我问的原因是:我想从另一个程序控制 bash。我想向 bash 发送箭头键

0 投票
3 回答
5711 浏览

python - Python:何时使用 pty.fork() 与 os.fork()

我不确定是否使用pty.fork()os.fork()何时从我的应用程序生成外部后台进程。(如国际象棋引擎)

如果父进程被杀死,我希望生成的进程死亡,就像在终端中生成应用程序一样。

两个分叉之间的起起落落是什么?

0 投票
3 回答
1132 浏览

c - 在 C 中运行时与命令行程序交互(stdin/out)

我认为我想做的事情是调用 GUI/命令行包装 sftp(1)。我需要一种简单的方法来启动该程序并在运行时对其输出做出反应。此外,我必须能够向它发送输入,需要完全交互。

我尝试了 forkpty(模拟 TTY),但没有找到一个使用 forkpty 完成这项工作的好例子,而是有几个关于参数溢出的警告和不使用它的建议。另一个奇怪的事情是 windowssize 参数......

请给我一个或多个示例,说明如何在 C 中调用和与命令行程序交互,或者在 iPhone GUI 中集成 sftp 的另一种方式