在Python中同时使用多个程序

时间:2015-01-30 20:25:34

标签: python sockets parallel-processing

我对Python很新,我正在尝试编写一个脚本来自动化测试。

工作原理: 程序A:通过串口发送命令等待响应,然后执行下一个命令 程序B:使用Subprocess模块​​的TCP_Client.exe应用程序将参数(ip,端口,数据包数量,大小)与应用程序一起发送到命令提示符并读取输出。

它应该做什么:

  1. 启动通过串口访问的设备上的tcp服务器(Pyserial模块)===========>计划A
  2. 将“tcpclient.exe ...”发送到命令提示符。这将绑定套接字,然后提示我通过串口向设备发送更多命令。 ==========>计划B
  3. 向设备发送其他命令==========>计划A
  4. 输入一个数字以将tcpclient.exe继续到发送数据包的下一阶段。 ===========>计划B.
  5. 等待数据包发送。程序发送提示说完成但不退出。等我在设备上阅读数据===========>计划B
  6. 通过串口发送命令以读取数据==========>计划A
  7. 返回tcpclient.exe并退出程序。 (基本上需要打一个数字然后继续完成。
  8. RunSer2Command(lines2[21])
    time.sleep(1)       
    ls_output = subprocess.Popen(['tcpclient.exe','192.168.22.33','5000','100000','1400'],stdout=subprocess.PIPE)
    time.sleep(1)
    RunSer2Command(lines2[22])
    RunSer2Command(lines2[23])
    time.sleep(1)
    ls_output = subprocess.Popen(['3'],stdout = subprocess.PIPE)
    ls_output.communicate()
    
    RunSer2Command(lines2[24])
    
    ser2.close()
    

    像这样的东西

    有人能告诉我是否应该阅读多线程或者这个太小而不能要求吗? 如果是这样我应该寻找什么?

    提前致谢

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。 简短的回答是Threading会做到这一点。这也是不必要的。子进程模块足以让我工作。我只是没有做对

RunSer2Command(lines2[21])
time.sleep(1)   
ls_output = subprocess.Popen(['tcpclient.exe','192.168.4.110','8000','10000','1400'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,bufsize=3)
time.sleep(2)
RunSer2Command(lines2[22])
RunSer2Command(lines2[23])
time.sleep(1)
ls_output.communicate(input = '3')
ls_output.wait()
RunSer2Command(lines2[24])

对于那些关心穿线路线的人来说,确实让我到了某一点,我会补充一点但是我从未做过最后一次的情况......我找到了更容易的路线

def start_tcp_client(cond): 
    ls_output = subprocess.Popen(['tcpclient.exe','192.168.4.110','8000','1000','1400'],stdin=subprocess.PIPE,stdout=subprocess.PIPE,bufsize=3)
    with cond:
        cond.wait()
        ls_output.communicate(input = '3')
        ls_output.communicate()

def TCPSettings(cond):
    with cond:
        RunSer2Command(lines2[22])
        RunSer2Command(lines2[23])
        cond.notify()

    condition = threading.Condition()
    condition1 = threading.Condition()
    Client_thread=threading.Thread(name='Client_thread', target=start_tcp_client, args=(condition,))
    TCP_thread=threading.Thread(name='TCP_thread', target=TCPSettings, args=(condition,))
    RunSer2Command(lines2[21])
    time.sleep(2)   
    Client_thread.start()
    time.sleep(2)
    TCP_thread.start()
    time.sleep(1)
    Client_thread.join()
    time.sleep(10)
    RunSer2Command(lines2[24])

我还没有设法弄清楚所有的问题。似乎存在一些时间问题。一旦我完美地工作,我就会更新它。