Chinaunix

标题: 问个问题,python 如何输入模拟在键盘上输入CTRL+D [打印本页]

作者: hmchzb19    时间: 2016-09-30 07:04
标题: 问个问题,python 如何输入模拟在键盘上输入CTRL+D
本帖最后由 hmchzb19 于 2016-09-30 09:00 编辑

CTRL+D 默认输入的是EOF,
例如 跑wall 命令的时候,

wall +\n
This is a good day to die \n
CTRL +D (表示结束)

请问怎么实现最后发送最后这个CTRL+D(EOF)。

  1. ssh=paramiko.SSHClient()
  2.     ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  3.     ssh.connect("127.0.0.1",username="root",password='password')
  4.     stdin,stdout,stderr=ssh.exec_command("wall",get_pty=True)
  5.     stdin.write('lol\n')
  6.     stdin.flush()
  7.     #print(dir(stdout))
  8.     data=stdout.read().decode()
  9.     print(data)
复制代码


作者: jeppeter    时间: 2016-09-30 09:08
本帖最后由 jeppeter 于 2016-09-30 15:32 编辑
  1. #! python

  2. import subprocess
  3. import sys
  4. import time


  5. def start_process(cmd):
  6.         return subprocess.Popen(cmd,stdin=subprocess.PIPE,shell=True)

  7. def call_cmd_ctrld(cmd):
  8.         p = start_process(cmd)
  9.         time.sleep(1.0)
  10.         p.stdin.write(bytearray([0x4]))
  11.         time.sleep(2.0)
  12.         return

  13. def main():
  14.         cmd = ' '.join(sys.argv[1:])
  15.         call_cmd_ctrld(cmd)
  16.         return

  17. main()
复制代码

回复 1# hmchzb19

上面的代码 保存为sendkey.py
运行下面的代码保存为waitkey.py
python sendkey.py python waitkey.py

  1. #! python
  2. import sys

  3. def main():
  4.         print('start')
  5.         for l in sys.stdin:
  6.                 print('%s'%(l.rstrip('\r\n')))
  7.         print('end')
  8.         return

  9. main()
复制代码

最关键的那句话,就是
  1. p.stdin.write(bytearray([0x4]))
复制代码
这个0x4就是CTRL+D 的二进制码。






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2