【问题标题】:How to open new console in Python and get data from user that typed in it?如何在 Python 中打开新控制台并从输入的用户那里获取数据?
【发布时间】:2018-11-22 21:08:18
【问题描述】:

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

一些场景:

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

我知道如何打开新窗口:

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

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

任何帮助将不胜感激:)

【问题讨论】:

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


    【解决方案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


    或者,如果那不可接受,您尝试做的是来自命令行的双向“管道”数据。看看this post 他们在哪里做的:

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

    【讨论】:

    • 我有一个多线程应用程序,登录一个控制台,其中一个线程负责与用户通信。这个线程应该有新的控制台窗口,因为以前的日志可能非常不可用。
    • 这更有意义。我会看看 subprocess 和 popen。可能值得关注this post,并为此编写一个轻量级的 python 文件。这可能会使以后添加某些东西变得更容易,比如命令行参数。我过去通过创建一个相对简单的套接字服务器做过类似的事情。其他人用过multiprocessing
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-28
      • 2019-12-06
      • 2014-02-25
      • 1970-01-01
      • 2021-09-15
      • 2011-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      相关资源
      最近更新 更多