python subprocess 交互式命令的自动执行

需求: Android 板子上要跑一个程序, 这个 程序是一个交互式程序, 会根据用户的不同的输入,执行不同的子命令。

自动化脚本是跑在PC端的python  脚本。
 

难点:如何用 python 脚本执行交互式的 子命令,  以往的经验都是用 python 的os.system()  或者subprocess.Popen() 执行某一个 程序, 没有做过交互式的 动作。

实现: 使用subprocess.Popen()  设置子进程的标准输入为PIPE, 然后向PIPE 里写入子命令。

 

例程:

with open("test.log","w") as f:
            p = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,stdout=f.fileno(),stderr=subprocess.PIPE )
		  
            play_cmd = r'app.uri.url  /data/test.mp3'
        
            print(p.pid)
         
            p.stdin.write(bytes(play_cmd,'utf-8'))   
            p.stdin.write(bytes("\n",'utf-8'))  
            p.stdin.flush()
            #out, err = p.communicate(input=bytes('app.uri.url  /data/test.mp3\n','utf-8'))
            print("xxxxxxxxxxxxx")
        

说明:

1. 只是python3 的版本,其中bytes() 函数不能少。

2.  写完命令后要写入换行符,和调用flush() 函数。

3.subprocess.Popen() 里的stdin 必须是PIPE.

 

你可能感兴趣的:(Python)