我正在为Python命令行应用程序编写测试框架。应用程序将创建目录,在当前目录中调用其他shell脚本,并在Stdout上输出。使用python子进程模块,如命令行模拟器
我试图将{Python-SubProcess,CommandLine}组合等同于{Selenium,Browser}。第一个组件播放东西在第二个和检查如果输出是预期的。我面临以下问题
- Popen构造会在该命令完成后接受一个命令并返回。我想要的是对进程进行实时处理,以便我可以运行进一步的命令+验证,并最终关闭一次完成的shell
- 为编写一些基础结构代码以实现此目的,我很好,因为我们有很多命令行应用程序需要像这样测试。
这里是我运行
p = subprocess.Popen("/bin/bash", cwd = test_dir)
p.communicate(input = "hostname") --> I expect the hostname to be printed out
p.communicate(input = "time") --> I expect current time to be printed out
样本代码,但该过程将挂起或可能是我做错了什么。另外我该如何“抓住”该子过程的输出,以便我可以断言存在某种东西?
无法为单个进程调用通信()两次。我已经更新了答案。 – Ellioh 2013-03-04 16:31:31
沟通('主机名\ ntime \ nexit \ n')可能吗?你真的需要交互式地处理这个过程,还是只执行多个命令?后者更容易。 – Ellioh 2013-03-04 16:56:23