2 个不稳定版本

使用旧的Rust 2015

0.5.0 2020年2月17日
0.4.5 2020年2月16日
0.4.4 2020年1月13日
0.4.3 2018年11月23日

#69 in #tty

25 每月下载量
用于 winpty

MIT 许可证

385KB
7K SLoC

C++ 7K SLoC // 0.2% comments Rust 101 SLoC // 0.1% comments Batch 67 SLoC // 0.3% comments

winpty

Build Status

winpty是一个Windows软件包,提供了一个类似于Unix pty-master的接口,用于与Windows控制台程序通信。该软件包包括一个库(libwinpty)和一个工具(用于Cygwin和MSYS),可以在Cygwin/MSYS pty中运行Windows控制台程序。

该软件通过启动一个新的、隐藏的控制台窗口的winpty-agent.exe进程来工作,该窗口作为控制台API和终端输入/输出转义码之间的桥梁。它轮询隐藏控制台的屏幕缓冲区以查找更改,并生成相应的输出流。

Unix适配器允许在mintty或Cygwin的sshd下运行Windows控制台程序(例如CMD、PowerShell、IronPython等),具有正常工作的输入(例如箭头和功能键)和输出(例如行缓冲)。该库对于编写非Cygwin SSH服务器也可能很有用。

支持的Windows版本

winpty可以在Windows XP到Windows 10之间运行,包括服务器版本。它可以编译成32位或64位二进制文件。

Cygwin/MSYS适配器 (winpty.exe)

先决条件

要构建winpty,您需要以下内容

  • Cygwin或MSYS安装
  • GNU make
  • 一个能够将C++11代码编译为winpty.dllwinpty-agent.exe的二进制文件的MinGW g++工具链
  • 一个针对Cygwin或MSYS的g++工具链,用于构建winpty.exe

由于winpty被分为两部分,因此需要两个g++工具链。 winpty.dllwinpty-agent.exe二进制文件与本地Windows命令提示符窗口接口,因此它们使用本地MinGW工具链编译。 winpty.exe二进制文件与MSYS/Cygwin终端接口,因此它使用MSYS/Cygwin工具链编译。

MinGW似乎被分为两个发行版——MinGW(创建32位二进制文件)和MinGW-w64(创建32位和64位二进制文件)。任选其一通常都是可接受的。

Cygwin软件包

Cygwin默认的g++编译器针对的是Cygwin自身,但Cygwin还打包了MinGW-w64编译器。截至本文写作时,必要的软件包包括

  • 要么是mingw64-i686-gcc-g++,要么是mingw64-x86_64-gcc-g++。根据您的CPU架构选择合适的编译器。
  • gcc-g++
  • make

截至本文写作时(2016年1月23日),只有MinGW-w64编译器是可接受的。MinGW编译器(例如来自mingw-gcc-g++包)不再维护,并且存在太多错误。

MSYS软件包

对于原始MSYS,使用mingw-get工具(MinGW安装管理器),并至少选择以下组件

  • mingw-developer-toolkit
  • mingw32-base
  • mingw32-gcc-g++
  • msys-base
  • msys-system-builder

在运行./configure时,请确保mingw32-g++已添加到您的PATH。它将在C:\MinGW\bin目录中。

MSYS2软件包

对于MSYS2,使用pacman并安装以下软件包

  • msys/gcc
  • mingw32/mingw-w64-i686-gccmingw64/mingw-w64-x86_64-gcc。根据您的CPU架构选择合适的编译器。
  • make

MSYS2提供三个开始菜单快捷方式来启动MSYS2

  • MinGW-w64 Win32 Shell
  • MinGW-w64 Win64 Shell
  • MSYS2 Shell

要构建winpty,使用与MSYS2架构匹配的MinGW-w64 {Win32,Win64}快捷方式。这些快捷方式会将来自{mingw32,mingw64}/mingw-w64-{i686,x86_64}-gcc包中的g++编译器放入PATH

或者,而不是安装mingw32/mingw-w64-i686-gccmingw64/mingw-w64-x86_64-gcc,安装mingw-w64-cross-gccmingw-w64-cross-crt-git包。这些包将在/opt/bin中安装交叉编译器,然后任何三个快捷方式都将工作。

构建Unix适配器

在项目目录中,运行./configure,然后运行make,然后运行make install。默认情况下,winpty将被安装到/usr/local。将PREFIX=<path>传递给make install以覆盖此默认值。

使用Unix适配器

mintty 或 Cygwin sshd 中运行 Windows 控制台程序时,请在命令行前添加 winpty

$ winpty powershell
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\rprichard\proj\winpty> 10 + 20
30
PS C:\rprichard\proj\winpty> exit

嵌入 winpty / MSVC 编译

有关 winpty.dll 导出函数的原型,请参阅 src/include/winpty.h

只有 winpty.exe 二进制文件使用 Cygwin;所有其他二进制文件无需 Cygwin 也可工作,并且可以使用 MinGW 或 MSVC 编译。要使用 MSVC 编译,请下载 gyp 并在 src 子目录中运行 gyp -I configurations.gypi。这将生成 winpty.sln 和相关项目文件。有关处理 MSVC 版本和不同体系结构的说明,请参阅 src/winpty.gypsrc/configurations.gypi 文件。

目前使用 MSVC 编译 winpty 需要 MSVC 2013 或更高版本。

调试 winpty

winpty 附带一个用于收集带时间戳的调试输出的工具。要使用它

  1. 在 winpty 所在的同一台计算机上运行 winpty-debugserver.exe
  2. WINPTY_DEBUG 环境变量设置为 trace 以对 winpty.exe 进程和/或使用 libwinpty.dll 的进程进行跟踪。

winpty 还识别一个 WINPTY_SHOW_CONSOLE 环境变量。将其设置为 1 以防止 winpty 隐藏控制台窗口。

本项目采用 MIT 许可证分发(请参阅项目根目录中的 LICENSE 文件)。

通过为此项目提交拉取请求,您同意将您的贡献许可给本项目,许可协议为 MIT 许可证。

依赖项

~0–2MB
~38K SLoC