2012-06-22 26 views
0

我寫了一個類似於服務的twitter,我想用python對它進行一些壓力測試。 我有一個客戶端程序,稱爲「客戶端」。 我想編寫一個腳本,它將啓動「客戶端」程序的幾個進程,發送幾條消息,等待幾秒鐘並退出。Python--調用幾個進程並向它們發送輸入

我寫的是

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

現在我不能調用溝通的方法,因爲它等待一個EOF但這個過程還沒有結束。調用stdin.flush的 似乎也不起作用。

有關如何操作的任何提示? (我不需要在Python中執行此操作,如果使用bash腳本執行此操作,也可以)

回答

0

您可以使用bash循環運行某些客戶端並將它們放入後臺。如果你需要一個溝通,只是把它放到前臺使用FG,然後把它放到後臺再次使用BG

+0

你的意思是在一個shell腳本中?你能給我舉個例子嗎? – Bg1987

+0

是的,但我不確定我是否正確理解你。這是一個小例子。一個腳本啓動5個副本,然後嘗試殺死。這很簡單,但會顯示如何控制過程。來電者[link](http://ideone.com/1dpRm),客戶端[link](http://ideone.com/gx0dk) – janisz

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() 
相關問題