fiatjaf
fiatjaf

Reputation: 12159

How do I invoke a text editor from a command line program like git does?

Some git commands, git commit for example, invoke a command-line based text editor (such as vim or nano, or other) pre-filled with some values and, after the user saves and exists, do something with the saved file.

How should I proceed to add this functionality to a Python similar command-line program, at Linux?


Please don't stop yourself for giving an answer if it does not use Python, I will be pretty satisfied with a generic abstract answer, or an answer as code in another language.

Upvotes: 4

Views: 653

Answers (1)

Moose
Moose

Reputation: 148

The solution will depend on what editor you have, which environment variable the editor might possibly be found in and if the editor takes any command line parameters.

This is a simple solution that works on windows without any environment variables or command line arguments to the editor. Modify as is needed.

import subprocess
import os.path

def start_editor(editor,file_name):

    if not os.path.isfile(file_name): # If file doesn't exist, create it
        with open(file_name,'w'): 
            pass

    command_line=editor+' '+file_name # Add any desired command line args
    p = subprocess.Popen(command_line)
    p.wait()

file_name='test.txt' # Probably known from elsewhere
editor='notepad.exe' # Read from environment variable if desired

start_editor(editor,file_name)

with open(file_name,'r') as f: # Do something with the file, just an example here
    for line in f:
        print line

Upvotes: 1

Related Questions