tMC*_*tMC 6 python unix linux tty termios
我想我不清楚getty/agetty/mgetty程序在linux/unix机器上的功能是什么.我可以用这样的东西在tty上启动一个shell:
TTY = '/dev/tty3'
cpid = os.fork()
if cpid == 0:
os.closerange(0, 4)
sys.stdin = open(TTY, 'r')
sys.stdout = open(TTY, 'w')
sys.stderr = open(TTY, 'w')
os.execv(('/bin/bash',), ('bash',))
Run Code Online (Sandbox Code Playgroud)
..如果我切换到tty3,有一个shell运行 - 但一些键击被忽略/永远不会被发送到shell.shell知道TTY设置不正确,因为bash会说"无法打开tty,禁止作业控制"
我知道'termios'模块具有更改TTY设置的功能,这是'tty'模块使用的设置,但是我无法找到python正确设置TTY并启动shell的示例.我觉得它应该是简单的东西,但我不知道在哪里看.
查看*etty程序的来源并没有帮助我 - 对我来说C看起来像希腊语: - /
也许我只是没有找到合适的条款?有人在过去用Python取代了*etty程序并得到了他们想要分享的解释吗?
感谢您娱乐我的基本问题:)
我可以看到您至少遗漏了两件事 - 可能还有更多:
首先,您需要setsid()在关闭旧的标准输入/标准输出后,打开新的TTY之前调用子进程。这确实两个重要的事情-它使你的新工艺新会话的领导者,并从以前的控制终端的关联它(只是关闭该终端是不是足够了)。这将意味着当您打开新的 tty 时,它将成为您想要的控制终端。
其次,您需要设置TERM环境变量以匹配新的 tty。
| 归档时间: |
|
| 查看次数: |
3971 次 |
| 最近记录: |