在python中模拟编码会话

时间:2018-12-07 11:18:30

标签: python python-3.x

我想模拟一个编码会话(对于视频录制会话:我不是触摸打字员:-)

例如,我有一个这样的shell脚本(test.sh

hello="Hello"
world="world"
echo $hello", "$world

我有一个像这样的Python脚本(Simulate_KeyPresses.py):

import sys
import time
import subprocess

def send_letter(letter):
  # V1 : simple print
  sys.stdout.write(letter)
  sys.stdout.flush()

  # V2: Test with expect (apt-get install expect)
  # cmd = """echo 'send "{}"' | expect""".format(c)
  # subprocess.run(cmd, shell=True)


def simulate_keypresses(content):
  lines = content.split("\n")
  for line in lines:
    for c in line:
      send_letter(c)
      time.sleep(0.03)
    send_letter("\n")
    time.sleep(0.5)


if __name__ == "__main__":
  filename = sys.argv[1]
  with open(filename, "r") as f:
    content = f.read()
  simulate_keypresses(content)

我可以这样调用:

python Simulate_KeyPresses.py test.sh

效果很好。 但是,当我将其传输到bash时,如下所示:

python Simulate_KeyPresses.py test.sh | /bin/bash

我明白了

Hello, world

即我只得到标准输出,并且不显示按键。

我想看的东西

hello="Hello"
world="world"
echo $hello", "$world
Hello, world

我找到了一个相关的答案(Simulate interactive python session),但它只能处理python编码会话。

我尝试使用Expect,但是它不能按预期工作(也没有显示stdin)。

我们将不胜感激!

2 个答案:

答案 0 :(得分:3)

您可以将程序tee用作:

python Simulate_KeyPresses.py test.sh | tee /dev/tty | /bin/bash

答案 1 :(得分:0)

如何将其添加到脚本中?

subprocess.call("./{}".format(filename), shell=True)

结果将是

hello="Hello"
world="world"
echo $hello", "$world

Hello, world