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

I want to call up an editor in a python script to solicit input from the user, much like crontab e or git commit does.

Here's a snippet from what I have running so far. (In the future, I might use $EDITOR instead of vim so that folks can customize to their liking.)

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 )

My problem is that by using Popen, it seems to keep my i/o with the python script from going into the running copy of vim, and I can't find a way to just pass the i/o through to vim. I get the following error.

Vim: Warning: Output is not to a terminal

Vim: Warning: Input is not from a terminal

What's the best way to call a CLI program from python, hand control over to it, and then pass it back once you're finished with it?

解决方案

Calling up $EDITOR is easy. I've written this kind of code to call up 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()

The good thing here is, the libraries handle creating and removing the temporary file.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值