python 执行 shell命令 的几

2023-01-31 02:01:37 python 执行 命令

 

 

os.system

最近有个需求就是页面上执行shell命令,第一想到的就是os.system


os.system('cat /proc/cpuinfo')

但是发现页面上打印的命令执行结果 0 或者 1,当然不满足需求了。

 

os.popen()

尝试第二种方案 os.popen()


output = os.popen('cat /proc/cpuinfo')
print output.read()

通过os.popen()返回的是 file read 的对象,对其进行读取 read() 操作可以看到执行的输出。但是无法读取程序执行的返回值。

 

commands.getstatusoutput()

尝试第三种方案 commands.getstatusoutput() 一个方法就可以获得到返回值和输出,非常好用。


(status, output) = commands.getstatusoutput('cat /proc/cpuinfo')
print status, output

 

python Document 中给的一个例子,


>>> import commands
>>> commands.getstatusoutput('ls /bin/ls')
(0, '/bin/ls')
>>> commands.getstatusoutput('cat /bin/junk')
(256, 'cat: /bin/junk: No such file or directory')
>>> commands.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
>>> commands.getoutput('ls /bin/ls')
'/bin/ls'
>>> commands.getstatus('/bin/ls')
'-rwxr-xr-x 1 root 13352 Oct 14 1994 /bin/ls'

python commands 模块在 python3.x 被 subprocess 取代

https://blog.csdn.net/ronnyjiang/article/details/53333538

 

 

 

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,

值得一说的是,fabric ansible 内部的远程管理就是使用的paramiko来现实。

Python自动化运维技术与最佳实践》

 

下载安装

由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto


pip3 install pycrypto
pip3 install paramiko

使用示例:


import paramiko

if __name__ == '__main__':

    ip = '172.28.11.132' 
    port = 22           
    user_name = "root"  
    user_passWord = r'123456' 
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(ip, port, user_name, user_password)
    cmd = 'ls /'
    stdin, stdout, stderr = ssh.exec_command(cmd)
    print stdout.readlines()

 

模块使用

 

执行命令,用户名+密码


#!/usr/bin/env python3
#执行命令,用户名+密码

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.101.2', 22, "root", '111111')
stdin, stdout, stderr = ssh.exec_command('df')

print(stdout.read())
ssh.close()

执行命令:python3 paramiko_test01.py 

 

执行命令,密钥


#!/usr/bin/env python3
#执行命令,密钥

import paramiko
private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.101.2', 22, 'root', '111111')

stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
ssh.close()

 

上传或下载文件,用户名+密码


#!/sur/bin/env python3
#上传或下载文件,用户名+密码

import paramiko
import os,sys

t = paramiko.Transport(('192.168.101.2', 22))
t.connect(username='root',password='111111')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test.py','/tmp/test.py') #第一个参数是本地上传的文件,第二个参数>时上传后目标机器保存的文件
t.close()

 

下载或上传文件,密钥


#!/usr/bin/env python3
#下载或上传文件,密钥

import paramiko
pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from+private_key_file(pravie_key_path)

t = paramiko.Transport(('192.168.101.2', 22))
t.connect(username='root',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test2.py', '/tmp/test2.py')

t.close()

 

 

 

 

 

 

相关文章