我正在尝试获取当前TTY/PTY的设备路径。
如果我在shell中运行tty
,它会告诉我当前TTY的设备,但如果我使用child_process
运行tty
,我会得到一个错误。我也尝试过fs.readlinkSync('/proc/self/fd/0')
,但它也不起作用。
我尝试过的:
luis@Iphone-47 ~ % tty
/dev/ttys003
luis@Iphone-47 ~ % node
Welcome to Node.js v19.7.0.
Type ".help" for more information.
> const cp = require('child_process')
undefined
> try { cp.execSync('tty') } catch (err) { console.log(err.stdout.toString()) }
not a tty
undefined
>
有没有跨平台的方法可以做到这一点?
**编辑:**这在Python中有效,为什么在Node中不行?
luis@Iphone-47 ~ % python3
Python 3.9.1 (v3.9.1:1e5d33e9b9, Dec 7 2020, 12:10:52)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('tty')
/dev/ttys001
0
>>>
2条答案
按热度按时间20jt8wwn1#
您可以使用tty模块,它提供了一种跨平台的方式来访问终端相关功能。尽管如此,tty仅在Node.js中可用,而在浏览器环境中不可用。
如果path不可用,则使用tty模块的isatty函数检查文件描述符是否与终端设备关联。
这个简单的方法是使用isatty函数检查stdin的文件描述符是否与终端设备相关联。如果是,则使用fs. realpathSync返回/dev/tty设备的路径。如果不是,则返回null。希望对您有所帮助。
idfiyjo82#
好的,我阅读完a very long issue on GitHub后就想明白了。
技巧是设置
stdio
继承stdin
,并管道stdout
和stderr
: