问题标签 [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.
python - 如何与 Python 中的另一个程序进行交互?
我想编写一个运行另一个程序的 Python 脚本,读取另一个程序的输出并对其进行操作。问题是这个程序提示输入密码,我不知道如何自动提供密码。(出于此脚本的目的,密码是否以纯文本形式存储在脚本本身中并不重要。)我想要做的是:
这导致 someprogram 给了我不需要的密码提示,也没有给我程序的输出作为返回值。可悲的是,程序没有办法绕过这个提示。
不幸的是,我对如何解决这个问题也有一些限制。首先,我坚持使用 Python 2.3(所以我不能使用 subprocess 模块)。其次,我无法安装任何新模块,(所以没有预期)。幸运的是,它不必特别便携,因此仅 Linux 的解决方案就可以了。
我一直在试图弄清楚 pty 模块,因为它看起来提供了我需要的东西,但是在花了几个小时与它搏斗之后,我无法弄清楚如何让它以我需要的方式工作。
python - 伪终端主机读取它刚刚写入的内容
我正在开发一个项目,该项目将使用串行端口连接的“虚拟设备”(python 进程)与也使用串行端口的真实设备连接起来,并且我正在使用伪终端连接多个(超过 2 个)这些串行端口通信过程(建模串行设备)在一起,我遇到了一些障碍。
我有一个 python 进程,它生成伪终端,将 pty 的从端符号链接到文件(因此进程可以为文件名创建一个 pyserial 对象),而主端由我的 pty 生成进程保存并读取;当数据进入一个主控时,数据会被记录下来,然后写入其他主控。如果聆听过程始终存在,则此方法有效。
问题是虚拟设备何时死机或从未启动(这是该项目的有效用例)。在我的系统上,似乎如果数据被写入 pty 的主端,如果没有任何东西在听从端,则在该主端上调用 read 将返回刚刚写入的数据!这意味着设备不止一次地接收相同的数据——不好!
例子:
我希望对 read() 的调用阻塞,直到从站发送数据。其实这是slave设备的行为——它可以写,然后os.read(slave,1)会阻塞直到master写数据。
我的“虚拟设备”需要能够传递文件名来打开串口对象;我试图对主端进行符号链接,但这会导致我的虚拟设备打开 /dev/ptmx,这会创建一个新的伪终端对,而不是链接回已经存在的从属!
有没有办法改变主人的行为?或者甚至只是获取与从设备相对应的主设备的文件名(不仅仅是/dev/ptmx)?
提前致谢!
python - Python终端仿真
我想在 Python 应用程序中运行一个与 xterm 兼容的虚拟终端。我需要在其中运行基于 ncurses 的应用程序,向其提供用户输入并读取其输出。
到目前为止,我找到了 python-vte,但它只提供了一个 GTK+ 小部件(libvte 具有所需的 VtePty 类,但 Python 绑定没有)并且具有不可接受的 libgtk 依赖项。
有没有其他方法可以在 Python 中执行终端仿真?
ruby - Ruby 杀死用 PTY.spawn 打开的虚拟外壳
在一个 ruby 脚本中,我启动了更多的虚拟 shell,每个都由一个 shell 管理器对象管理,如下所示:
在稍后的某个时间点,我想销毁这个实例并杀死相关的 shell 进程。可悲的是,我无法让任何东西正常工作。这是我尝试过的,按概率工作:
- 没有什么,也就是说,当管理对象被破坏时,期望 shell proc 被关闭。
- 使用 kill 命令杀死在 shell 上运行的所有进程(这有效),然后使用
system("kill #{@shell[2]")
. 这没有效果。 - 在上面使用 -9。这使 shell 进程失效。
当 ruby 程序退出时,所有的 shell 都会关闭,但我想在保持程序运行的同时杀死它们。有人遇到过这样的事情吗?
python - Python:如何窥视 pty 对象以避免阻塞?
我pty
用来读取非阻塞进程的标准输出,如下所示:
一切正常,除了while-loop
偶尔阻塞。这是因为该行print stdout.readline()
正在等待从中读取某些内容stdout
。但是如果程序已经终止,我上面的小脚本将永远挂起。
我的问题是:有没有办法窥视stdout
对象并检查是否有数据可供读取?如果不是这种情况,它应该继续执行while-loop
它会发现进程实际上已经终止并中断循环的地方。
c - 写给master pty,但无法读取slave :(
试图编写原始测试。程序必须启动 tcp-server,接收连接并将接收到的数据重定向到分叉程序。这是代码:
程序的输出:
简而言之:服务器成功接收来自 tcp-client 的数据,将其写入 master pty,但从属端没有收到它。我看过很多例子,但看不到错误。请建议我...
UPD我试过int len = read(STDIN_FILENO, buf, sizeof(buf));
代替execvp
它,它工作正常!我想我必须发送某种控制符号,例如输入...有什么想法吗?
unix - POSIX `pipe` 双向
我想以pipe
某种方式使用(POSIX)以使其双向连接。即我可以在两端读写。
那可能吗?
(我不想用 4 个文件描述符创建两个管道。我只想有 2 个文件描述符,我可以在两端读/写。)
基本上,它应该是openpty
万一失败的后备。
unix - 如何使用另一个进程的 STDIO “telnet”?
通常 CouchDB 通过一个简单的基于行的协议通过 STDIO 与视图服务器通信。
我想要做的是,而不是视图服务器,让它读取和写入某种管道或伪终端,然后我连接到它,并播放视图服务器。
我认为一种方法是对cat
FIFO 进行大量复杂的使用。
但是我发现在我的 Mac 上echo "hi" > /dev/ttys000
又回到了我的终端,所以我认为应该可以通过这种方式建立连接,但我无法从手册页中知道如何真正做到这一点。
[更新] 我找到了write
,它从沙发发送消息到我的终端,但沙发没有附加,所以我不能发送消息作为回报。
python - 有没有类似 Python 的 pty.fork for Ruby 的东西?
我正在尝试将一些 Python 代码如下移植到 Ruby:
因为我需要像终端一样读写子进程,所以我知道我应该使用 Ruby 的 PTY 模块来代替 Kernel.fork。但它似乎没有等效的 fork 方法;我必须将命令作为字符串传递。这是我能得到的最接近 Python 功能的地方:
显然,其中一些是特定于 Linux 的,这很好。显然有些是伪代码,但这是我能找到的唯一方法,而且我只有 80% 的把握它无论如何都能工作。Ruby 肯定有更清洁的东西吗?
重要的是“get_command_based_on_user_input()”不会阻塞父进程,这就是我将它卡在子进程中的原因。