Advertisement
Guest User

Untitled

a guest
Apr 14th, 2023
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.22 KB | None | 0 0
  1. #!/usr/bin/python3
  2.  
  3. from tkinter import *
  4. import os
  5. import re
  6.  
  7. ttyDevice=""
  8.  
  9.  
  10. def escapeString(s) :
  11.     result = re.sub(r'([ \"\'\|\<\>])', r'\\\1', s)
  12.     return result
  13.  
  14. def send_entry_to_terminal(*args) :
  15.     # Параметр *args необходим из-за того, что данная функция
  16.     # может быть вызвана без параметра (из кнопки)
  17.     # или с одним параметром (из поля ввода)
  18.  
  19.     tty=ttyDevice
  20.     print('tty: '+tty)
  21.  
  22.     command=commandEntry.get()
  23.     print('Command: '+command)
  24.  
  25.     # Вывод в терминал строки команды, которая будет выполняться
  26.     cmdLine="echo %s <%s >%s 2> %s" % (escapeString(command), tty, tty, tty)
  27.     print('Echo line:')
  28.     print(cmdLine)
  29.     os.system(cmdLine)
  30.  
  31.     # Выполнение команды в терминале
  32.     cmdLine="(%s) <%s >%s 2> %s" % (command, tty, tty, tty)
  33.     print('Command line:')
  34.     print(cmdLine)
  35.     os.system(cmdLine)
  36.  
  37.  
  38. root = Tk()
  39.  
  40. # Место для вставки терминала
  41. termFrame = Frame(root, height=700, width=1000)
  42. termFrame.pack(fill=BOTH, expand=YES)
  43. wid = termFrame.winfo_id()
  44. print("Terminal window id: "+str(wid))
  45.  
  46. # Панель для ввода отправляемой команды
  47. panelFrame=Frame(root)
  48.  
  49. Label(panelFrame, text="Command:").pack(side=LEFT)
  50. commandEntry = Entry(panelFrame)
  51. commandEntry.insert(0, "ls -l")
  52. commandEntry.pack(side=LEFT,fill=X,expand=1)
  53. commandEntry.bind("<Return>", send_entry_to_terminal)
  54.  
  55. buttonSend = Button(panelFrame, text="Send", command=send_entry_to_terminal)
  56. buttonSend.pack(side=LEFT)
  57.  
  58. panelFrame.pack(fill=X, expand=1)
  59.  
  60. # Получение tty с которым будет работать терминал
  61. os.system('xterm -into %d -geometry 160x50 -sb -e "tty > /tmp/pyguitty.txt"' % wid)
  62. fp=open('/tmp/pyguitty.txt', 'r')
  63. ttyDevice=fp.readline().strip();
  64. fp.close();
  65. print("tty info: "+ttyDevice)
  66.  
  67. # Открытие терминала с шеллом. Перед запуском шелла выводится рабочий tty
  68. os.system('xterm -into %d -geometry 160x50 -sb -e "tty; sh" &' % wid)
  69.  
  70. root.mainloop()
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement