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)。
ssh=paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("127.0.0.1",username="root",password='password')
stdin,stdout,stderr=ssh.exec_command("wall",get_pty=True)
stdin.write('lol\n')
stdin.flush()
#print(dir(stdout))
data=stdout.read().decode()
print(data)
复制代码
作者:
jeppeter
时间:
2016-09-30 09:08
本帖最后由 jeppeter 于 2016-09-30 15:32 编辑
#! python
import subprocess
import sys
import time
def start_process(cmd):
return subprocess.Popen(cmd,stdin=subprocess.PIPE,shell=True)
def call_cmd_ctrld(cmd):
p = start_process(cmd)
time.sleep(1.0)
p.stdin.write(bytearray([0x4]))
time.sleep(2.0)
return
def main():
cmd = ' '.join(sys.argv[1:])
call_cmd_ctrld(cmd)
return
main()
复制代码
回复
1#
hmchzb19
上面的代码 保存为sendkey.py
运行下面的代码保存为waitkey.py
python sendkey.py python waitkey.py
#! python
import sys
def main():
print('start')
for l in sys.stdin:
print('%s'%(l.rstrip('\r\n')))
print('end')
return
main()
复制代码
最关键的那句话,就是
p.stdin.write(bytearray([0x4]))
复制代码
这个0x4就是CTRL+D 的二进制码。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2