Python3:根据请求Surpress特定的控制台输出

时间:2017-08-31 07:26:30

标签: python printing output

我有一个Python脚本,称之为SCRIPT_1,它运行另外两个脚本,SCRIPT_2和SCRIPT_3。

SCRIPT_2是一个活动进程,可以打印周期性消息(在本例中为网络流量)。 SCRIPT_3是一个活动的CLI接口,允许输入,因此我可以插入命令。 例如,输入并输入" reset"重置网络节点。

两个scrips输出到同一个终端会话。这是有意和可取的,因为我将在各种设备上使用这些脚本,并且可能并不总是更容易管理多个屏幕。 为此,他们使用通用" print"命令。

但是,由于两个进程都将内容打印到同一个屏幕,我希望能够向SCRIPT_3发出命令,以便不显示SCRIPT_2的打印输出。

我还没有弄清楚如何做到这一点。 最好是,我可以给出一个命令" show_output" " hide_output"到SCRIPT_3并打印输出停止。理想情况下,我也可以继续对两个脚本使用相同的print()命令,因为SCRIPT_2非常大。 (它隐藏了整个系统,整个系统使用print())。

关于如何解决此问题的任何建议?

目前,SCRIPT_3的代码并不多于此:

    def run(self):
    print("Type 'help' for available commands, 'test' to run test.")
    while True:
        params = input('>> ')
        params = params.split()


        if params[0] is not None and params[0] == "help":
            print("Available commands are:")
        elif params[0] is not None and params[0] == "test":
            print("Test")
        elif params[0] is not None and params[0] == "reset_nodes":
            print("Resetting all nodes")
            asyncio.run_coroutine_threadsafe(self.iot_net.reset_all_nodes(), self.loop)
        elif params[0] is not None and params[0] == "":
            pass
        elif params[0] is not None and params[0] == "done":
            pass
        else:
            print("Unknown command.")
    sys.exit()
    print("Bye.")

编辑: 回答相关评论,谢谢!

SCRIPT_1按如下方式运行其他脚本:

if __name__ == "__main__":
    manager = SCRIPT_1()

    # set up the IoT Network API
    iot_net = SCRIPT_2()

    # Sven: Give time to establish connections
    time.sleep(3)
    # set up the resource pool
    pool_object = Pool(iot_net, LOCATION)
    asyncio.ensure_future(pool_object.run())

    # set up message aggregator
    payload_object = Aggregator()
    asyncio.ensure_future(payload_object.run())

    # start the web api
    api = WebAPI()
    api.run(pool_object, payload_object)

    # MUST START LAST
    tasks = []
    for x in range(BATCH_SIZE):
        tasks.append(asyncio.ensure_future(iot_net.consume_deployment(x)))
    asyncio.wait(tasks)

    loop = asyncio.get_event_loop()

    cm_cli     = SCRIPT_3(iot_net,loop)
    cm_cli.start()

    try:
        # asyncio.ensure_future(print_content('http://google.com'))
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        loop.close()

0 个答案:

没有答案