又一个针对python的winpty绑定

yawinpt的Python项目详细描述


又一个针对python的winpty绑定

Build statusLICENSEPyPI versionDevelopment statusDownload per monthwheelSupport python versionsCodecov

安装

pip install yawinpty

从源构建

Python3.5+
安装Visual C++ 2015 Build Tools,然后使用python setup.py build生成
较旧的python
Visual C++CPython version
10.03.3, 3.4
9.02.6, 2.7, 3.0, 3.1, 3.2

安装^ ^ EM1} $ Visual C++ 2015 Build Tools和VisualC++生成工具的匹配版本。打开“VisualC++^ {EM1} $ 2015 EEM>构建工具命令提示符”,与Python相同的拱,然后使用^ {TT1}$构建

基本示例

从进程获取输出

fromyawinptyimport*# open a ptywithPty()aspty:# spawn a process ``python -c "print('HelloWorld!')"``pty.spawn(SpawnConfig(SpawnConfig.flag.auto_shutdown,cmdline='python -c "print(\'HelloWorld!\')"'))# open the out pipe of console to readwithopen(pty.conout_name(),'r')asf:# HelloWorld!print(f.read())

与流程沟通

fromyawinptyimport*withPty()aspty:# spawn python replpty.spawn(SpawnConfig(SpawnConfig.flag.auto_shutdown,cmdline='python'))# open the in pipe of console to writewithopen(pty.conin_name(),'w')asf:f.write('1 + 2\n')# write EOF to exit pythonf.write('\x1a\n')withopen(pty.conout_name(),'r')asf:print(f.read())

控制台程序(navie)的gui日志

fromsysimportargvfromthreadingimportThreadfromsubprocessimportlist2cmdlinefromtkinterimport*fromyawinptyimport*root=Tk()con=Text(root)con.pack()defpoll():# strip escape seqwithPty(Config(Config.flag.plain_output))aspty:# run the cmdline passed in by ``sys.argv``pty.spawn(SpawnConfig(SpawnConfig.flag.auto_shutdown,cmdline=list2cmdline(argv[1:])))withopen(pty.conout_name(),'r')asf:whileTrue:ln=f.readline()ifnotln:break# log to guicon.insert(END,ln)Thread(target=poll).start()root.mainloop()

使用yawinpty

使用yawinpty的共同目标是打开一个伪终端,然后在其中生成一个进程,并将输入发送到它的stdin,然后从它的stdout获取输出。pty包装一个伪终端并执行这些操作

classyawinpty.ptyconfig=yawinpty.config()

yawinpty.pty接受yawinpty.config的实例作为其配置

classyawinpty.config*标志

对于要初始化的标志,“配置类”通常是一组class.flag.*。示例:

cfg=yawinpty.Config(yawinpty.Config.flag.plain_output)

help(yawinpty.Config.flag)获取更多支持的标志

对于yawinpty.SpawnConfig,它是类似的

help(yawinpty.Config)获取更多方法

Pty类的实例具有以下方法:

pty.conin_name

私人conout_name

私人conerr_name

获取控制台输入/输出/错误管道的名称。可以将名称传递给内置的open以打开管道

pty.代理进程id

获取代理进程的进程ID

pty.设置大小

设置终端的窗口大小

pty.spawnspawn配置

在pty中生成一个进程。spawn_config是yawinpty.SpawnConfig的实例。注意,一个pty实例只能产生一次,否则将引发yawinpty.RespawnError

返回派生进程的process id,thread id元组

classyawinpty.sprownconfig*sprownflags,appname=none,cmdline=none,cwd=none,env=none

spawnFlags
来自yawinpty.SpawnConfig.flag
的标志
appname
可执行文件的完整路径。如果指定了cmdline,则可以是None
cmdline
传递给派生进程的命令行
cwd
生成进程的工作目录
env
生成进程的环境,类似于{'VAR1': 'VAL1', 'VAR2': 'VAL2'}
的dict

请注意,init aSpawnConfig不会生成进程。只有在调用Pty.spawn()时才会生成进程。一个spawnconfig实例可以多次使用

pty.等待代理timeout=yawinpty.infinite

pty.wait\u子进程timeout=yawinpty.infinite

<>等待代理/生成进程退出。超时时引发yawinpty.timeoutexpired

pty.关闭

杀死进程不退出,关闭pTy并释放Windows资源

异常

所有与winpty相关的异常都是yawinpty.YawinptyError的子类。help(yawinpty)了解更多信息

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
传递Java处理类类型参数的方式的参数   java安卓中间层admob在logcat中导致大量GC_FOR_ALLOC释放消息   java Vert。x Http请求未将参数分配为配置   java中多线程的输出不正确   如何减少java本地线程的冗余   java不完全分块结果   使用OpenCv时java中的Mat数据类型不受支持错误   Java中的正则表达式不工作,而同一正则表达式在shell中工作   java如何从数组中删除元素?   JDBCJava。sql。SQLException:[Microsoft][ODBC Microsoft Access驱动程序]操作必须使用可更新的查询   java如何以对角线打印字符串变量的字符?   SonarQube 5.2的java自定义插件生成NoClassDefFoundError   macos使用Java应用程序打开浏览器选项卡