python raw input用法,Python raw_input()替换,它使用可配置文本edi

这篇博客探讨了如何创建一个名为my_raw_input()的函数,该函数使用像Vim这样的文本编辑器作为用户输入接口。用户可以在编辑器中输入文本,保存并退出,然后这些内容将被读取并返回到Python脚本中。作者提到了git的提交过程作为类似的工作流程,并分享了一段代码示例,展示了如何使用os模块的fork和exec函数来实现这一功能。此外,代码还考虑了提供默认输入和使用环境变量来指定编辑器的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试实现raw_input()的替换,它将使用vim等可配置文本编辑器作为用户的接口。在

理想的工作流程如下:您的python脚本正在运行,并调用my_raw_input()。在

Vim(或emacs、gedit或任何其他文本编辑器)打开一个空白文档

在文档中键入一些文本,然后保存并退出

python脚本继续运行,文件的内容作为my_raw_input()的返回值。在

如果您熟悉git,这是使用git commit时的经验,其中编辑器是通过core.editor配置的。其他实用程序,如crontab -e也会这样做。在

最后,我希望这个my_raw_input()函数也接受一个带有默认输入内容的可选字符串,然后用户可以对其进行编辑。在

迄今为止的研究os.exec用editor命令替换当前进程,但不返回。也就是说,当vim启动时,python脚本就会退出。在

popen不以交互方式启动子进程,没有显示用户界面。在

{cd4{to write{stdin>命令行中没有参数。在

我看了看code for git,我根本看不懂。在

这可能吗?在

编辑

到目前为止答案不错。我还发现mecurial code也在做同样的事情。我还通过查看crontab code给出了一个例子,但与某些响应相比,它看起来没有必要复杂。在#!/usr/bin/python

import os

import tempfile

def raw_input_editor(default=None, editor=None):

''' like the built-in raw_input(), except that it uses a visual

text editor for ease of editing. Unline raw_input() it can also

take a default value. '''

editor = editor or get_editor()

with tempfile.NamedTemporaryFile(mode='r+') as tmpfile:

if default:

tmpfile.write(default)

tmpfile.flush()

child_pid = os.fork()

is_child = child_pid == 0

if is_child:

os.execvp(editor, [editor, tmpfile.name])

else:

os.waitpid(child_pid, 0)

tmpfile.seek(0)

return tmpfile.read().strip()

def get_editor():

return (os.environ.get('VISUAL')

or os.environ.get('EDITOR')

or 'vi')

if __name__ == "__main__":

print raw_input_editor('this is a test')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值