这是我想的最简单的版本,我猜。在我的情况下,用法是:
runon.py 'records/manage.py runserver' 'npm run watch'
这行得通,只是感觉还有更简单的东西。
#!/usr/bin/env python3
import sys
import argparse
import subprocess
import time
import shlex
parser = argparse.ArgumentParser(
description='Manage multiple running commands.')
parser.add_argument('cmds', metavar="'cmdline -opts'", type=str, nargs='+',
help='a shell command to run')
args = parser.parse_args()
calls = {}.fromkeys(args.cmds)
for cmd in calls.keys():
calls[cmd] = subprocess.Popen(shlex.split(cmd), text=True)
print'start(%d): %s' % (calls[cmd].pid, cmd)
while calls:
finished = []
for name, call in calls.items():
ret = call.poll()
if ret is not None:
print('return(%d): %s' % (ret, name))
finished.append(name)
for n in finished:
calls.pop(n)
time.sleep(0.5)