gpt4 book ai didi

python - 如何从 python 脚本启动 EDITOR(例如 vim)?

转载 作者:IT老高 更新时间:2023-10-28 21:37:02 24 4
gpt4 key购买 nike

我想在 python 脚本中调用一个编辑器来征求用户的输入,就像 crontab egit 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()

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

关于python - 如何从 python 脚本启动 EDITOR(例如 vim)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com