2015-12-19 108 views
0

这个Python程序输入fdisk。我看到输出。 fdisk是一个交互式程序。如何让Python程序将“m”传递给第一个字段并按回车?Python脚本自动与fdisk进行交互提示

import subprocess 
a = "dev/sda" 
x = subprocess.call(["fdisk", a]) 
print x 

我宁可不导入新的模块/库,但我可以。我已经尝试了与上面的subprocess.call()和额外的参数不同的语法。似乎没有任何工作。我得到不同的错误。我已阅读Python文档。我想要提供输入并在后续的fdisk的交互式菜单选项中按Enter键。

回答

2

检查出pexpect库(我知道你不想要一个额外的模块,但你想使用最好的工具)。它是纯Python,没有编译的子模块,因此安装非常简单。基本上,它在Python中的作用与经典的Unix工具expect相同 - 产生子应用程序,控制它们并响应其输出中的预期模式。对于自动化,特别是应用程序测试来说,这非常棒,您可以在其中快速输入命令行程序的最新版本一系列输入,并根据输出显示指导交互。

如果您根本不需要其他模块,则可以始终使用subprocess模块的Popen()构造函数。它会产生并创建与子进程的连接,允许您根据需要与其进行通信,实际上它依赖于它。我个人认为使用pexpectsubprocess.Popen()更直观,但这只是我。因人而异。

+0

Popen和写入到标准输入是需要的所有 –

+0

@PadraicCunningham是真实的,但我发现'pexpect'更容易使用。我会在答案中提到它。 – MattDMo

+0

是的,peeppect绝对是一个更好的通用工具,但你不妨扔在popen解决方案中,因为它非常简单。 –

相关问题