Как открыть новую консоль в Python и получить данные от пользователя, который в нее набрал? - PullRequest
0 голосов
/ 13 июня 2018

Я ищу фрагмент скрипта Python3, который открывает новое окно консоли и взаимодействует с ним.

Какой-то сценарий:

  • Открытие новой консоли
  • Подсказка "Введите некоторые данные "
  • Пользователь записывает некоторые данные
  • Данные отправляются с консоли обратно в скрипт Python
  • Данные обрабатываются в сценарии
  • Некоторая информация отправляетсяи отображается на ранее открытой консоли.

Я знаю, как открыть новое окно:

os.system("gnome-terminal -e 'bash -c \"some instruction\"'")

, но это знание для меня беспомощно, потому что я не знаю, как общаться с этимновое окно консоли.

Любая помощь будет признательна:)

Ответы [ 2 ]

0 голосов
/ 18 июня 2018

Я использовал сокетную связь между двумя консолями.

Это обходной путь, но в этом решении есть все функции, которые мне нужны в моей программе.

Я написал второй скрипт на Pythonкоторые соединяются с моей основной программой, а затем получают ввод от пользователя и отправляют его в основную программу.

0 голосов
/ 13 июня 2018

Я немного не уверен, почему вы захотите это сделать.Могу ли я предложить полностью питонический подход с использованием потоков и queues :

import threading
from queue import Queue
import time

def worker(q):
    """thread worker function"""
    running = True
    while running:
        message = q.get()
        print('Worker received message: {}'.format(message))
        if message == 'KILL':
            running = False
    print('Worker completed')

if __name__ == '__main__':
    q = Queue()
    worker = threading.Thread(target=worker, args=(q,))
    worker.start()
    running = True
    while running:
        user_input = input('Input some data: ')
        q.put(user_input)
        if user_input == 'KILL':
            running = False
        time.sleep(0.5)
    print('Program terminated')

Теперь у вас есть возможность отправлять команды на другой скрипт Python из консоли.Работник может делать все, что вы хотите сейчас.Для более подробного примера см. этот пост


В качестве альтернативы, если это неприемлемо, вы пытаетесь сделать данные «ТРУБЫ» из командной строки в обоих направлениях.Посмотрите на этот пост , где они делают:

proc = subprocess.Popen(['some_cmd', '--command_line_parameters'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
...