Python打开屏幕并在屏幕内执行

Python打开屏幕并在屏幕内执行

我有一个 py 脚本 S1,需要在屏幕内执行。从最终用户的角度来看,我希望他们只执行另一个 python 脚本 S2,它将打开一个屏幕并在该屏幕内执行脚本 S1。

我的S2.py是这样的:

import os 
os.cmd('echo Outside main terminal')
os.cmd('screen -S sTest')
os.cmd('echo I would like to be inside screen here. Not successfully!. How to send command to screen instead of remaining at main Terminal')
os.cmd('spark-submit S1.py') #this should execute inside screen. currently main Terminal is the one that runs it
#Additional steps to check status, clean up, check if screen is active then spawn another sTest2 sTest3, otherwise close and/or reuse screen sTest, etc.
screen_list = os.cmd('screen -ls')
if 'sTest' in screen_list ...... #let python process

我想要的是最终用户可以简单地运行python S2.py,屏幕的麻烦由我在后面处理。我需要有额外的机制来清理屏幕,使用现有的屏幕等。向用户提供自行打开屏幕的指令将使每个终端都充满屏幕。

需要在屏幕内的原因S1.py是由于在主终端上运行时 SSH 连接的稳定性。

答案1

可能最好使用子进程并将命令写入屏幕的标准输入。

proc = subprocess.Popen('screen -S sTest', shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
proc.stdin.write('echo I would like to be inside screen here.\n')
proc.stdin.write('spark-submit S1.py\n')
statusProc = subprocess.run('screen -ls', shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
statusString = statusProc.stdout.decode('ascii')
# parse screen's output (statusString) for your status list

您可能需要温习 subprocess.Popen 的文档,因为可能有关于如何正确关闭此类子流程的具体信息,但这应该会让您走上正确的轨道。

相关内容