如何在Python CLI程序中智能地启动默认编辑器?

5 投票
2 回答
1844 浏览
提问于 2025-04-15 16:44

这个问题里的回答没有直接解决我想要的核心问题。在一个基于命令行的Python程序中,我希望用户能够编辑一个文件,然后再返回到程序中。在返回之前,我希望他们能够取消所做的编辑。这种感觉应该像Subversion中的提交备注编辑功能。

对于这种任务,目前有哪些最佳实践呢?

2 个回答

2

Subversion等工具使用一个叫做$EDITOR的环境变量来决定用哪个程序来编辑文本文件。当然,$EDITOR这个变量只有在类Unix系统的命令行中才能用。如果你是在Windows上,就得用不同的方法,比如用cmd /c start tempfile.txt来打开文件;在Mac OS X上,可以用open tempfile.txt来打开。

其实,这就是你之前问题的答案和相关答案所说的内容。

如果你只是想要能够“取消”编辑,可以先把文件做个临时副本,然后在这个副本上进行编辑。这样,你的程序就可以把临时文件的内容复制到真正的文件里,或者如果用户选择取消,就不复制。Subversion就是这样做的。

10

你可以看看Mercurial的源代码,它是用Python写的。

他们使用 os.environ 来读取环境变量的值,比如 HGEDITORVISUALEDITOR,如果没有设置这些变量,就默认使用vi编辑器。接着,他们用 os.system 来启动编辑器,编辑一个用 tempfile.mkstemp 创建的临时文件。当编辑器完成后,他们会读取这个文件。如果文件里有内容,操作就继续进行;如果没有内容,就会中止。

如果你想看看Mercurial是怎么做的,具体的细节可以在 ui.pyutil.py 找到。

撰写回答