2016-01-14 2 views
1

У меня есть сценарий питона, который открывает файл для меня в Emacs, и делать, что вызывает процесс в XTerm как такPython послать команду Xterm

"""AutoEmacs Document""" 

# imports 
import sys 
import os 
import psutil 
import subprocess 
from argparse import ArgumentParser 

# constants 
xlaunch_config = "C:\\cygwin64\\home\\nalis\\Documents\\experiments\\emacs\\Autoemacs\\config.xlaunch" 
script = "xterm -display :0 -e emacs-w32 --visit {0}" 
# exception classes 

# interface functions 

# classes 


# internal functions & classes 

def xlaunch_check(): 
    # checks if an instance of Xlaunch is running 
    xlaunch_state = [] 
    for p in psutil.process_iter(): #list all running process 
     try: 
      if p.name() == 'xlaunch.exe':# once xlaunch is found make an object 
       xlaunch_state.append(p) 
     except psutil.Error: # if xlaunch is not found return false 
      return False 
    return xlaunch_state != [] #double checks that xlaunch is running 

def xlaunch_run(run): 
    if run == False: 
     os.startfile(xlaunch_config) 
     return 0 #Launched 
    else: 
     return 1 #Already Running 


def emacs_run(f): 
    subprocess.Popen(script.format(f)) 
    return 0#Launched Sucessfully 

def sysarg(): 
    f = sys.argv[1] 
    il = f.split() 
    l = il[0].split('\\') 
    return l[(len(l) - 1)] 

def main(): 
    f = sysarg() 
    xlaunch_running = xlaunch_check() 
    xlaunch_run(xlaunch_running) 
    emacs_run(f) 
    return 0 


if __name__ == '__main__': 
    status = main() 
    sys.exit(status) 
` 

и он работает довольно хорошо с случайным ошибка, но я хочу сделать ее немного более универсальной, если Python отправит консоль Xterm, она запускает команды после ее запуска, как «-e emacs-w32», и такая база основана на полученном им входе. Я уже пробовал что-то вроде этого:

# A test to send Xterm commands 
import subprocess 
xterm = subprocess.Popen('xterm -display :0', shell=True) 
xterm.communicate('-e emacs') 

но это, кажется, ничего не делает. помимо запуска терминала. Я провел некоторое исследование по этому вопросу, но это только меня смутило. Некоторая помощь была бы очень оценена.

ответ

1

Чтобы открыть Emacs в эмулятор терминала, используйте:

Linux;

Popen(['xterm', '-e', 'emacs']) 

Окна:

Popen(['cmd', '/K', 'emacs']) 

Для Cygwin использования:

Popen(['mintty', '--hold', 'error', '--exec', 'emacs']) 
+0

Хорошо, что не совсем ответ, который я искал, но я думаю, что я могу внести изменения в мой первоначальный сценарий что позволит ему работать лучше – Nalisarc