我正在用 Python 为命令行应用程序编写一个测试框架。应用程序将创建目录,调用当前目录中的其他 shell 脚本,并将输出到 Stdout。
我试图将 {Python-SubProcess, CommandLine} 组合视为等同于 {Selenium, Browser}。第一个组件在第二个组件上播放一些东西并检查输出是否符合预期。我面临以下问题
- Popen 构造接受一个命令并在该命令完成后返回。我想要的是该过程的实时句柄,因此我可以运行进一步的命令+验证,并最终在完成后关闭外壳
- 我可以编写一些基础设施代码来实现这一点,因为我们有很多需要像这样测试的命令行应用程序。
这是我正在运行的示例代码
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
但该过程挂起,或者可能是我做错了什么。另外,我如何“获取”该子流程的输出,以便我可以断言某些东西存在?