当前位置: 首页 > 面试题库 >

从python脚本调用编辑器(vim)

陈鸿才
2023-03-14
问题内容

我想在python脚本中调用一个编辑器,以征询用户的输入,就像crontab e还是git commit这样做。

这是我到目前为止所运行内容的摘录。(将来,我可能会使用$ EDITOR而不是vim,以便人们可以根据自己的喜好进行自定义。)

tmp_file = '/tmp/up.'+''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(6))
edit_call = [ "vim",tmp_file]
edit = subprocess.Popen(edit_call,stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True )

我的问题是,通过使用Popen,似乎使python脚本的I/O不能进入正在运行的vim副本中,而我找不到仅将I /O传递给vim的方法。我收到以下错误。

Vim: Warning: Output is not to a terminal
Vim: Warning: Input is not from a terminal

从python调用CLI程序,将控制权交给它,然后在完成后将其传递回去的最佳方法是什么?


问题答案:

调用$ EDITOR很容易。我已经编写了这种代码来调用编辑器:

import sys, tempfile, os
from subprocess import call

EDITOR = os.environ.get('EDITOR','vim') #that easy!

initial_message = "" # if you want to set up the file somehow

with tempfile.NamedTemporaryFile(suffix=".tmp") as tf:
  tf.write(initial_message)
  tf.flush()
  call([EDITOR, tf.name])

  # do the parsing with `tf` using regular File operations.
  # for instance:
  tf.seek(0)
  edited_message = tf.read()

这里的好处是,库可以处理创建和删除临时文件。



 类似资料:
  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 问题内容: 我正在尝试从python这样启动PowerShell脚本: 问题是我得到以下错误: 无法加载文件C:\ Users \ sztomi \ workspace \ myproject \ buildxml.ps1,因为在此系统上禁用了脚本的执行。请参阅“获取有关about_signing的帮助”以了解更多详细信息。 尽管事实上我很早以前确实通过键入管理员运行的PS终端来启用Powersh

  • 问题内容: 我有要从Python脚本调用的Perl脚本。我一直在寻找,并没有成功。我基本上是试图调用向Perl脚本发送1变量的方法,但是不需要Perl脚本的输出,因为它是一个自包含程序。 到目前为止,我想出的是: 只有刚刚开始的Python编程,所以我确定以上内容完全是胡说八道。任何帮助将非常感激。 问题答案: 如果您只想打开通往perl解释器的管道,那么您的方向正确。我认为您唯一缺少的是perl

  • 我目前有一个脚本写(从论坛上的其他人的帮助),已经工作了很多年。我现在正试图在另一个电子表格上使用,只需要在它的工作方式上做一个小小的调整。以下是当前脚本: 它以前的功能是确定日期 现在,我希望E列(第5列)在只编辑D列(第4列)时带有日期戳。我现在使用的是价格跟踪。D列将显示价格,E列将告诉我上次在电子表格中更新价格的时间。 我相信编辑需要在代码的第5行进行,在那里它需要一个指定的单元格,而不是