5

「git commit」などを実行したときに発生する機能を複製したいと考えています。エディターが開き、何かを入力して保存/終了し、そのファイルをエディターを起動したスクリプトに渡します。

この機能を Python でどのように実装しますか?

編集:

提案をありがとう、これは答えに基づいた実用的な例です:

import os, subprocess, tempfile

(fd, path) = tempfile.mkstemp()
fp = os.fdopen(fd, 'w')
fp.write('default')
fp.close()

editor = os.getenv('EDITOR', 'vi')
print(editor, path)
subprocess.call('%s %s' % (editor, path), shell=True)

with open(path, 'r') as f:
  print(f.read())

os.unlink(path)
4

5 に答える 5

4

通常の場合は次のとおりです。

  1. 一時ファイルを作成し、デフォルトの内容を書き込みます
  2. 環境変数「EDITOR」に保存されているコマンドを起動します。これは通常シェルコマンドであるため、引数が含まれている可能性があります->シェルで実行するか、それに応じて解析します
  3. プロセスが終了したら、一時ファイルを読み戻します
  4. 一時ファイルを削除する

だからこのようなもの:

import os, subprocess, tempfile
f, fname = tempfile.mkstemp()
f.write('default')
f.close()
cmd = os.environ.get('EDITOR', 'vi') + ' ' + fname
subprocess.call(cmd, shell=True)
with open(fname, 'r') as f:
    #read file
os.unlink(fname)
于 2012-04-12T18:11:42.090 に答える
1

変更する予定のテキスト データを一時ファイルに保存し、os.system または subprocess.Popen を使用して、そのファイルを指す外部プロセスとしてエディター (vi) を開き、さらに制御する必要がある場合は、一時ファイルを読み取ります。ファイルバック。

デフォルトでviを開くことをお勧めしますが、「VISUAL」環境変数の内容を尊重してください。

import os

name = os.tmpnam()
editor = "vi" if not ["VISUAL"] in os.environ else os.environ["VISUAL"]
os.system("%s %s" % (editor, name))
data = open(name).read()
os.unlink(name)
于 2012-04-12T18:12:20.360 に答える
0

これを実装する1つの方法は、サブプロセスを使用することです。コードは次のようになります。

import subprocess
subprocess.call(['vi', 'filename.txt'])

これからの復帰は、viの復帰ステータスを与えます。

于 2012-04-12T18:11:50.770 に答える
0

コマンドをインストールipythonして見てください%edこの同様の質問の他の提案も参照してください

于 2012-04-12T18:08:43.727 に答える