화면 내에서 실행해야 하는 py 스크립트 S1이 있습니다. 최종 사용자의 관점에서는 화면을 열고 해당 화면 내에서 스크립트 S1을 실행하는 또 다른 Python 스크립트 S2를 실행하기를 원합니다.
내 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에 대한 문서를 자세히 살펴보는 것이 좋지만 이를 통해 올바른 방향으로 나아갈 수 있습니다.