我与screen
同时运行了很多独立程序。这些程序输出(cout
C ++)中的每一个都是它们当前的进展(从0到100,100表示它们已完成)。如果我能编写一个列出分离的屏幕会话的Python脚本,然后一个接一个地附加和分离它们,阅读进度然后将它全部输出给我,对我来说会更容易。
我可以看到除了附加/分离部分之外的所有操作。或者screen
中的参数是否会返回当前窗口?
对不起,如果这听起来很混乱,请不要犹豫,请你澄清。
答案 0 :(得分:1)
如果您已经要使用脚本进行监控,那么通过python启动它们并管道输出会不会容易得多?
这可以通过默认Python库中的subprocess
模块轻松完成。
答案 1 :(得分:1)
这是您可以使用的一种方法,而不是屏幕。它从您作为命令行参数传递的文件中读取需要运行的所有程序的列表。
import os
import sys
import subprocess
import threading
from queue import Queue
import time
lock = threading.Lock()
q = Queue()
def do_work(item):
while True:
line = item.stdout.readline().strip()
if line == "":
break
elif line == "100":
with lock:
print("Child process is a success.")
def worker():
item = q.get()
do_work(item)
q.task_done()
def get_programs(filename):
input = open(filename, "r")
programs = []
counter = 1
for line in input:
line = line.strip()
if line.startswith(";"):
continue
if len(line) == 0:
continue
program = line.split(" ")
if not os.path.exists(program[0]):
print("ERROR: \"%s\" at line %s does not exist." % (program[0], counter))
continue
programs.append(program)
counter += 1
return programs
if __name__ == "__main__":
if len(sys.argv) < 2 or not os.path.exists(sys.argv[1]):
print("Please provide a valid program config file.")
sys.exit()
programs = get_programs(sys.argv[1])
print("Loaded %s entries from \"%s\"." % (len(programs), sys.argv[1]))
for program in programs:
s = subprocess.Popen(program, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
q.put(s)
t = threading.Thread(target=worker)
t.daemon = True
t.start()
q.join()
print("All tasks are done.")
希望这有帮助,知道你是否需要任何修改,祝你好运!