Skip to content

windows系统中,使用win10新增的conpty API,代理必须有终端才能运行的程序,使得它重定向IO也能运行

License

Notifications You must be signed in to change notification settings

XY0797/pty-proxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

终端代理

将诸如Python等不支持重定向IO的应用,使用ConPTY/WinPTY API代理成可重定向IO的程序

比如:配置pty-proxy的目标应用为python,就可以把pty-proxy当成python直接启动然后重定向IO

名词解释

重定向IO:CreateProcess创建进程时提供STARTUPINFO指定hStdInput、hStdOutput、hStdError,以此获取控制台输出的方法叫重定向IO。

ConPTY API:虚拟终端API,使用CreatePseudoConsole创建虚拟终端,需要Win10以上的操作系统才可用。详见微软的API文档

WinPTY API:一个社区维护的项目,Win7及以上皆可用。详见项目主页

使用

一共有两个文件:

pty-proxy.exe:主程序,可随意重命名

pty-proxy-child.exe:辅助程序,名字不可改,必须和主程序在同一个目录下!

终端内启动pty-proxy.exe即查看详细用法

注意:输出的内容含有VT-100转义序列,又叫ANSI转义序列。需要处理掉这些转义序列才能得到正常的文本。推荐使用后端为WinPTY的版本,因为这个版本的转义序列会显著少于ConPTY后端的版本,使用正则\x1B\[(.*?)[A-Za-z]即可去除大部分转义序列。

开发

先运行一次debug模式的构建:

cargo build --features debug_mode --features conpty

构建过后才能运行:

cargo run --features debug_mode --features conpty --bin pty-proxy -- cmd.exe /k echo Hello, World!

如果修改了pty-proxy-child,则需要重新运行一次debug模式的构建

如果要开发winpty后端的版本,把--features conpty换成--features winpty即可。

发行

ConPTY后端

cargo build --features conpty --release

target/release下的可执行文件即为构建产物

WinPTY后端

构建前先去https://github.com/rprichard/winpty下载release,比如winpty-0.4.3-msvc2015.zip

然后在合适位置创建一个winpty_dev文件夹,并且添加到环境变量PATH

release包内的x64/bin/winpty.dllx64/bin/winpty-agent.exex64/lib/winpty.lib复制到winpty_dev文件夹内

最后使用以下命令构建:

cargo build --features winpty --release

target/release下的可执行文件即为构建产物,发行时需要把winpty-agent.exewinpty.dll和构建产物放到同一个文件夹下,否则会无法运行。

About

windows系统中,使用win10新增的conpty API,代理必须有终端才能运行的程序,使得它重定向IO也能运行

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages