#我知道两种(Windows系统)
#1:
os.system('commandline')#直接运行,运行成功返回0
#2:
p=os.popen('commandline')#打开一个线程运行命令,并可以像读取文件一样读取返回信息
print(p.read())#读取返回信息
p.close()#关闭
⑵ 【telnetlib】使用Python登录Cisco交换机执行命令
更多内容请点击 我的博客 查看,欢迎来访。
telnetlib --- Telnet client
最近要对交换机端口进行控制,如果每次使用命令去操作确实挺麻烦的,就使用脚本一键实现,并有记录日志的功能。参考 https://blog.csdn.net/study_in/article/details/89338016
Telnet.read_until(expected, timeout=None) : #读取连接服务器后显示的内容,直到遇到同 expected 相同的字节串。或者等待时间大于 timeout 时直接向下运行。
Telnet.read_very_eager() : 读取从上次IO阻断到现在所有的内容,返回的是字节串,需要进行 decode() 编码。如果连接关闭或者没有可用数据时会抛出 EOFError ,如果没有其他可用的数据,返回的是 b"" ,除非在IAC中间,否则不会阻碍。
Telnet.open(host, port=23[, timeout]) : 连接到主机,端口号为第二个可选参数,默认为标准的Telnet端口(23),可选的 timeout 参数指定连接的超时时间,如果未指定,将使用全局默认超时设置。不要尝试去重新打开一个已经连接的实例对象。
Telnet.close() : 关闭连接。
Telnet.write(buffer) : # 将一个字节串(byte string)写进socket,如果连接被阻塞,这也会被阻塞,如果连接关闭,会抛出 OSError 。
Telnet.interact() : telnet的交互功能,下面用了一个死循环保证用户能够一直输入命令进行某些操作,也可以使用 Telnet.interact() 这个方法来使所连接终端持久化,不过官网说 (emulates a very mb Telnet client)直译是一个非常愚蠢的客户端。
使用python实现对交换机端口关闭、打开功能。
⑶ 如何使用python实现远程登录到linux再远程登录到另一个linux
这个是服务端限制啊,你即使是用python实现,也是走ssh通道啊,也还是要ssh验证的,服务端限制,你还是没办法啊
如果你是嫌两次登陆麻烦,那就在ssh验证上做文章,实现免密码验证登陆
或者用A机器的ssh tunnel做代理
⑷ 如何使用python远程登录一个操作系统,并执行某条命令
你可以使用python的pexcpct包通过ssh调用远程服务器指令:
import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = raw_input('hostname: ')
username = raw_input('username: ')
password = getpass.getpass('password: ')
s.login (hostname, username, password)
s.sendline ('uptime') # run a command
s.prompt() # match the prompt
print s.before # print everything before the propt.
s.sendline ('ls -l')
s.prompt()
print s.before
s.sendline ('df')
s.prompt()
print s.before
s.logout()
except pxssh.ExceptionPxssh, e:
print "pxssh failed on login."
print str(e)
⑸ 如何在Python中执行DOS命令
关于python调用cmd命令,主要介绍两种方式:
一、Python的OS模块
OS模块调用CMD命令有两种方式:os.system(),os.popen()。 都是用当前进程来调用。
1、os.system()
a、简单粗暴的执行cmd指令
b、返回结果为0表示执行成功,无法获取命令输出的内容,本在cmd输出的内容会直接在控制台输出。
c、当命令运行结束后接着往下面执行程序(同步阻塞式)。用法如:os.system("ipconfig")。
2、os.popen()
a、能获取DOS命令输出的内容。
b、os.popen()返回的是一个file对象,那么可以跟打开文件一样操作,r是以读的方式打开。
c、当命令运行结束后接着往下面执行程序(同步阻塞式)。
注意:os.popen() 方法用于从一个命令打开一个读写管道,在Unix,Windows中有效。
用法如:
with os.popen(r"adb devices","r")as f:
text = f.read()
print(text)# cmd输出结果
二、管道subprocess模块
a、在当前进程下产生子进程。
b、用wait()函数等待结果(异步非阻塞式)。
【方法1】
result = subprocess.check_output(r'adb devices') ## 命令执行的输出结果放到了result里
print(result)
【方法2】
process = subprocess.Popen(r'adb devices',shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
command_output = process.stdout.read().decode('gbk')
print(command_output)
Notices:
有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上
process.wait()
我的GitHub
⑹ python pyqt5 如何把ssh远程执行的linux命令结果输出到控件上(如textEdit)
textEdit控件应该有个setText函数,可以使用它来显示想要显示的文本。
⑺ python udp可以远程执行cmd命令吗
1 import paramiko,os,sys
2
3 ip = raw_input("input ip address :>>>")
4 password = raw_input("input password:>>>")
5 cmd = raw_input("input your cmd:>>> ")
6
7 print '''
8 ------connecting to %s ,--------
9 '''%ip
10 def ssh_cmd(ip,port,cmd,user,passwd):
11 result = ""
12 try:
13 ssh = paramiko.SSHClient()
14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
15 ssh.connect(ip,port,user,passwd)
16 stdin, stdout, stderr = ssh.exec_command(cmd)
17 result = stdout.read()
18 print result
19 ssh.close()
20 except:
21 print "ssh_cmd err."
22 return result
⑻ 怎么用python登录windows系统
# -*- coding:utf-8 -*-
#! python2
import wmi
def sys_version(ipaddress, user, password):
conn = wmi.WMI(computer=ipaddress, user=user, password=password)
for sys in conn.Win32_OperatingSystem():
print "Version:%s" % sys.Caption.encode("UTF8"),"Vernum:%s" % sys.BuildNumber #系统信息
print sys.OSArchitecture.encode("UTF8") # 系统的位数
print sys.NumberOfProcesses # 系统的进程数
if __name__ == '__main__':
sys_version(ipaddress="ip", user="用户名", password="密码")
⑼ python 实现ssh的执行远端命令和scp的不同机器文件传输功能
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret
利用pexpect模块我们可以做很多事情,由于他提供了自动交互功能,因此我们可以实现ftp,telnet,ssh,scp等的自动登录,还是比较实用的。根据上面的代码相信读者已经知道怎么实现了(python就是那么简单!)。
用
上面的代码去完成任务还是比较费时间的,因为程序要等待自动交互出现,另外ubuntu用ssh连接就是比较慢,要进行一系列的验证,这样才体现出ssh
的安全。我们要提高效率,在最短的时间内完成。后来我发现了python里面的paramiko模块,用这个实现ssh登录更加简单。看下面的代码:
复制代码 代码如下:
#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y'
out = stdout.readlines()
#屏幕输出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要执行的命令列表
username = "" #用户名
passwd = "" #密码
threads = [] #多线程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()
上面的程序还是有些技巧的:
1.
利用多线程,同时发出登录请求,同时去连接电脑,这样速度快很多,我试了一下,如果不用多线程,直接一个一个挨着执行的话,大约5~10秒钟才能对一台电
脑操作完,具体时间要根据命令的来决定,如果是软件安装或者卸载时间要更长一些。这样下来怎么也要一二十分钟,用多线程后就快多了,所有的命令执行完用了
不到2分钟!
2.最好用root用户登录,因为安装或者卸载软件的时候如果用普通用户又会提示输入密码,这样又多了一次交互,处理起来就比较麻
烦!安装软件时apt-get install xxx
最好加上“-y”参数,因为有时安装或删除软件时提示是否继续安装或卸载,这又是一次自动交互!加上那个参数后就没有人机交互了。
3. 循环时循环所有ip,因为计算机的ip是路由器自动分配的,保险起见,最好全部都执行,保证没有遗漏的主机
4.远端执行命令时如果有交互,可以这样用 stdin.write("Y")来完成交互,“Y”就是输入“Y”。
5.把所有的命令放到一个列表里面,遍历列表可以依次执行列表里面的命令
6.为了更好的进行控制,最好在电脑上提前把root用户打开,装好ssh服务器并让其开机自动执行。