Python - 调用多个进程并向它们发送输入

时间:2012-06-22 10:06:34

标签: python python-2.7 subprocess

我写了一个类似Twitter的服务,我想用python做一些压力测试。 我有一个客户端程序,称为“客户端”。 我想写一个脚本,它将启动“客户端”程序的几个进程,发送一些消息,等待几秒钟然后退出。

我写的是

p = subprocess.Popen(['client','c1','localhost','4981'],stdin=subprocess.PIPE)

现在我无法调用通信方法,因为它等待EOF,但进程还没有结束。 调用stdin.flush似乎也不起作用。

有关如何执行此操作的任何提示? (我不必在python中执行此操作,如果使用bash脚本执行此操作也可以这样做)

2 个答案:

答案 0 :(得分:0)

您可以使用bash循环来运行某些客户端并将它们放入后台。如果您需要与其中一个进行通信,只需使用 fg 将其置于前台,然后使用 bg 再次将其置于后台

答案 1 :(得分:0)

致电p.stdin.close()表示没有更多消息:

#!/usr/bin/python
import time
from subprocess import Popen, PIPE

# start several processes of the the "client" program
processes = [Popen(['client','c1','localhost','4981'], stdin=PIPE)
             for _ in range(5)]

# send a few messages
for p in processes:
    print >>p.stdin, message
    p.stdin.close()

# wait a few seconds (remove finished processes while we wait)
for _ in range(3):
    for p in processes[:]:
        if p.poll() is not None:
           processes.remove(p)
    time.sleep(1)

# and will exit (kill unfinished subprocesses)
for p in processes:
    if p.poll() is None:
       p.kill()
       p.wait()