我有一个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()