node-pty

Fork pseudoterminals in Node.JS
pty tty terminal pseudoterminal forkpty openpty


Summary

Project Name node-pty Project Url https://github.com/Tyriar/node-pty
InceptionYear 2017-01-07 05:59:41 更新时间 2019-10-23 01:47:20
IssueManagement https://github.com/Tyriar/node-pty/issues Licenses MIT
仓库地址 git://github.com/Tyriar/node-pty.git 用户数 5
Node Engine 文件大小 231.5 KB
install tsc watch lint install postinstall test prepare prepublishOnly

项目介绍

# node-pty [![Build Status](https://dev.azure.com/vscode/node-pty/_apis/build/status/Microsoft.node-pty)](https://dev.azure.com/vscode/node-pty/_build/latest?definitionId=11) `forkpty(3)` bindings for node.js. This allows you to fork processes with pseudoterminal file descriptors. It returns a terminal object which allows reads and writes. This is useful for: - Writing a terminal emulator (eg. via [xterm.js](https://github.com/sourcelair/xterm.js)). - Getting certain programs to *think* you're a terminal, such as when you need a program to send you control sequences. `node-pty` supports Linux, macOS and Windows. Windows support is possible by utilizing the [Windows conpty API](https://blogs.msdn.microsoft.com/commandline/2018/08/02/windows-command-line-introducing-the-windows-pseudo-console-conpty/) on Windows 1809+ and the [winpty](https://github.com/rprichard/winpty) library in older version. ## Real-world Uses `node-pty` powers many different terminal emulators, including: - [Microsoft Visual Studio Code](https://code.visualstudio.com) - [Hyper](https://hyper.is/) - [Upterm](https://github.com/railsware/upterm) - [Script Runner](https://github.com/ioquatix/script-runner) for Atom. - [Theia](https://github.com/theia-ide/theia) - [FreeMAN](https://github.com/matthew-matvei/freeman) file manager - [atom-xterm](https://atom.io/packages/atom-xterm) - Atom plugin for providing terminals inside your Atom workspace. - [Termination](https://atom.io/packages/termination) - Another Atom plugin that provides terminals inside your Atom workspace. - [electerm](https://github.com/electerm/electerm) Terminal/ssh/sftp client(linux, mac, win). - [Extraterm](http://extraterm.org/) - [Wetty](https://github.com/krishnasrinivas/wetty) Browser based Terminal over HTTP and HTTPS Do you use node-pty in your application as well? Please open a [Pull Request](https://github.com/Tyriar/node-pty/pulls) to include it here. We would love to have it in our list. ## Example Usage ```js var os = require('os'); var pty = require('node-pty'); var shell = os.platform() === 'win32' ? 'powershell.exe' : 'bash'; var ptyProcess = pty.spawn(shell, [], { name: 'xterm-color', cols: 80, rows: 30, cwd: process.env.HOME, env: process.env }); ptyProcess.on('data', function(data) { process.stdout.write(data); }); ptyProcess.write('ls\r'); ptyProcess.resize(100, 40); ptyProcess.write('ls\r'); ``` ## Building ```bash # Install dependencies and build C++ npm install # Compile TypeScript -> JavaScript npm run tsc ``` ## Dependencies ### Linux/Ubuntu ``` sudo apt install -y make python build-essential ``` The following are also needed: - Node.JS 10+ ### Windows `npm install` requires some tools to be present in the system like Python and C++ compiler. Windows users can easily install them by running the following command in PowerShell as administrator. For more information see https://github.com/felixrieseberg/windows-build-tools: ```sh npm install --global --production windows-build-tools ``` The following are also needed: - [Windows SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) - only the "Desktop C++ Apps" components are needed to be installed - Node.JS 10+ ## Debugging [The wiki](https://github.com/Microsoft/node-pty/wiki/Debugging) contains instructions for debugging node-pty. ## Security All processes launched from node-pty will launch at the same permission level of the parent process. Take care particularly when using node-pty inside a server that's accessible on the internet. We recommend launching the pty inside a container to protect your host machine. ## Thread Safety Note that node-pty is not thread safe so running it across multiple worker threads in node.js could cause issues. ## Flow Control Automatic flow control can be enabled by either providing `handleFlowControl = true` in the constructor options or setting it later on: ```js const PAUSE = '\x13'; // XOFF const RESUME = '\x11'; // XON const ptyProcess = pty.spawn(shell, [], {handleFlowControl: true}); // flow control in action ptyProcess.write(PAUSE); // pty will block and pause the slave program ... ptyProcess.write(RESUME); // pty will enter flow mode and resume the slave program // temporarily disable/re-enable flow control ptyProcess.handleFlowControl = false; ... ptyProcess.handleFlowControl = true; ``` By default `PAUSE` and `RESUME` are XON/XOFF control codes (as shown above). To avoid conflicts in environments that use these control codes for different purposes the messages can be customized as `flowControlPause: string` and `flowControlResume: string` in the constructor options. `PAUSE` and `RESUME` are not passed to the underlying pseudoterminal if flow control is enabled. ## Troubleshooting ### Powershell gives error 8009001d > Internal Windows PowerShell error. Loading managed Windows PowerShell failed with error 8009001d. This happens when PowerShell is launched with no `SystemRoot` environment variable present. ### ConnectNamedPipe failed: Windows error 232 This error can occur due to anti-virus software intercepting winpty from creating a pty. To workaround this you can exclude this file from your anti-virus scanning `node-pty\build\Release\winpty-agent.exe` ## pty.js This project is forked from [chjj/pty.js](https://github.com/chjj/pty.js) with the primary goals being to provide better support for later Node.JS versions and Windows. ## License Copyright (c) 2012-2015, Christopher Jeffrey (MIT License).
Copyright (c) 2016, Daniel Imms (MIT License).
Copyright (c) 2018, Microsoft Corporation (MIT License).

Dependencys

GroupId ArtifactID Version 引用量
kkoopa nan 2.14.0 3527

开发依赖

GroupId ArtifactID Version 引用量
Kent C. Dodds cross-env 6.0.2 36174
Sindre Sorhus ps-list 6.3.0 44
palantir tslint 5.20.1 54689
ajaff tslint-consistent-codestyle 1.16.0 414