如何在Python中打开新的控制台并从输入的用户那里获取数据?

时间:2018-06-13 10:11:28

标签: linux python-3.x console-application

我正在寻找一个Python3脚本片段,它打开新的控制台窗口并与之通信。

某些情况:

  • 打开新控制台
  • 提示“输入一些数据”
  • 用户写一些数据
  • 数据从控制台发送回Python脚本
  • 数据以脚本
  • 处理
  • 在早期打开的控制台上发送并显示一些信息。

我知道如何打开新窗口:

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

但是这些知识对我来说无能为力,因为我不知道这个新的控制台窗口是如何通信的。

任何帮助都是apreciate:)

2 个答案:

答案 0 :(得分:1)

我有点不确定你为什么要这样做。我可以使用线程和queues来建议完全pythonic方法:

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脚本发送命令。工人现在可以做任何你想做的事。有关更详细的示例,请参阅this post

或者,如果这是不可接受的,那么您要做的是从两个方向的命令行“PIPE”数据。看看this post他们在哪里:

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

答案 1 :(得分:0)

我在两个控制台之间使用了套接字通信。

这是一些解决方法,但此解决方案具有我想要的所有功能。

我已经编写了第二个与我的主程序连接的Python脚本,然后从用户那里获得输入并将其发送到主程序。