栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用可配置文本编辑器的Python raw_input()替换

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用可配置文本编辑器的Python raw_input()替换

您将数据写入一个临时文件,然后在编辑器返回时读取它。如果运行,

git commit
您会注意到git在做同样的事情。

只要子进程具有

stdin
stdout
连接到终端的交互过程,就没有多余的步骤来交互式地启动程序。

与编辑器打交道有一个陷阱-
他们中的许多人将通过在同一目录中写入临时文件并将其移至旧文件上来保存文件。这使保存操作完全原子化(忽略电源可能会耗尽),但意味着我们必须在编辑器运行后重新打开临时文件,因为旧文件句柄将指向不再属于该文件的文件。文件系统(但仍在磁盘上)。

这个陷阱意味着我们不能使用

TemporaryFile
NamedTemporaryFile
,我们必须使用较低级别的工具,以便我们可以关闭文件描述符并重新打开文件而不删除它。

import tempfileimport subprocessimport osdef edit(data):    fdes = -1    path = None    fp = None    try:        fdes, path = tempfile.mkstemp(suffix='.txt', text=True)        fp = os.fdopen(fdes, 'w+')        fdes = -1        fp.write(data)        fp.close()        fp = None        editor = (os.environ.get('VISUAL') or       os.environ.get('EDITOR') or       'nano')        subprocess.check_call([editor, path])        fp = open(path, 'r')        return fp.read()    finally:        if fp is not None: fp.close()        elif fdes >= 0: os.close(fdes)        if path is not None: try:     os.unlink(path) except OSError:     passtext = edit('Hello, World!')print(text)

Git示例代码非常复杂,因为它没有使用像Python的

subprocess
模块这样的高级库。如果您阅读了
subprocess
模块源代码,则其中的很大一部分将看起来像链接的Git源代码(用Python代替C编写的除外)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/662207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号