在python上与交互式shell脚本交互

时间:2016-02-17 13:22:34

标签: python interactive-shell

我在Windows上有一个交互式shell应用程序。 我想编写一个python脚本,它将命令发送到该shell应用程序并读回响应。 但是我想以交互方式进行,即我希望shell应用程序在python脚本运行时保持运行。

我试过了

self.m_process subprocess.Popen(path_to_shell_app,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,universal_newlines=True)

然后使用stdin和stdout发送和接收数据。 似乎shell应用程序正在打开,但我无法与之通信。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

接下来,您应该使用communicate

stdout, stderr = self.m_process.communicate(input=your_input_here)

来自subprocess模块文档

  

<强> Popen.communicate(输入=无)
  与流程交互:将数据发送到stdin。从stdout和stderr读取数据,直到达到文件结尾。   等待进程终止。可选的输入参数应为a   要发送到子进程的字符串,如果没有数据,则为None   寄给孩子。

     

communic()返回一个元组(stdoutdata,stderrdata)。

     

请注意,如果要将数据发送到进程的stdin,则需要   使用stdin = PIPE创建Popen对象。同样,得到任何东西   除了结果元组中的None之外,你需要给stdout = PIPE   和/或stderr = PIPE。

答案 1 :(得分:1)

有一个专门为此构建的模块:pexpect。要使用import pexpect,然后使用process = pexpect.spawn(myprogram)创建新的子流程,并使用process.expect(mystring)process.expect_exact(mystring)来搜索提示或获取回复。 process.send(myinput)process.sendline(myinput)用于向子流程发送信息。