我想模拟一个编码会话(对于视频录制会话:我不是触摸打字员:-)
例如,我有一个这样的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)。
我们将不胜感激!
答案 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