python os远程_python socket 实现远程执行命令 上传 下载文件

client端:

#!/usr/bin/env python

import socket,time,os

import rlcompleter

h,p="192.168.220.130",12346

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

sock.connect((h,p))

def runcmd():

received=sock.recv(8192)

if received=="changed directoy successful":

print "changed directoy successful"

else:

print received

def putfile(filename):

print "\033[32;1mstart send %s\033[0m" %filename

f=open(filename,'rb')

while 1:

f_data=f.read(4096)

if not f_data:break

sock.sendall(f_data)

f.close()

time.sleep(0.5)

sock.sendall("completed")

print "send %s completed" %filename

def getfile(filename):

print "\033[32;1mstart get %s\033[0m" %filename

os.chdir(dir)

f=open(filename,'wb')

while 1:

data=sock.recv(8192)

if not data:break

if data=="completed":

time.sleep(0.5)

print "%s have get complete" %filename

break

f.write(data)

f.close()

while 1:

try:

cmd=raw_input("\033[32;1mPlease input will run command: \033[0m")

sock.sendall(cmd)

action=sock.recv(4096)

if action=="Has ready" and cmd.split()[0]=="put":

global dir

dir,filename=os.path.split(cmd.split()[1])

os.chdir(dir)

putfile(filename)

elif action=="Has ready" and cmd.split()[0]=="get":

dir,filename=os.path.split(cmd.split()[1])

getfile(filename)

# action=="Has ready" and cmd.split()[0] != "get" and cmd.split()[0] != "put":

else:

runcmd()

except KeyboardInterrupt:

print "\n\033[31;1mbye bye!\033[0m"

break

sock.close()

server端:#!/usr/bin/python

#coding=utf-8

import SocketServer

import os,time

class myserver(SocketServer.BaseRequestHandler):

def runcmd(self,comm):

print "\033[33;1mwill run %s on %s\033[0m" %(comm,self.client_address[0])

self.request.sendall("Has ready")

if comm.split()[0]=="cd":

os.chdir(comm.split()[1])

self.request.sendall("changed directoy successful")

else:

cmd=os.popen(comm)

result=cmd.read()

result_data="\n\033[35;1mFeedback from Server \n\033[0m" + result

self.request.sendall(result_data)

def handle(self):

print "\033[32;1m connected from %s\033[0m" %self.client_address[0]

while 1:

# print "\033[32;1m connected from %s\033[0m" %self.client_address[0]

try:

data=self.request.recv(4096)

# filepath=data.split()[1]

# dir=('/').join(filepath.split('/')[:-1])

if data.split()[0]=="put":

global dir

dir,filename=os.path.split(data.split()[1])

self.recvfile(filename)

elif data.split()[0]=="get":

dir,filename=os.path.split(data.split()[1])

self.sendfile(filename)

else:

self.runcmd(data)

except IndexError:

print "exit", self.client_address

break

def recvfile(self,filename):

print "\033[32;1mstart receive %s...\033[0m" %filename

self.request.sendall("Has ready")

os.chdir(dir)

f=open(filename,'wb')

while 1:

data=self.request.recv(4096)

if not data:break

if data=="completed":

print "%s have received complete" %filename

break

f.write(data)

f.close()

def sendfile(self,filename):

print "\033[32;1mstart send %s...\033[0m" %filename

os.chdir(dir)

f=open(filename,'rb')

self.request.sendall("Has ready")

time.sleep(0.5)

while 1:

f_data=f.read(8192)

if not f_data:break

self.request.sendall(f_data)

f.close()

time.sleep(0.5)

self.request.sendall("completed")

print "send %s completed" %filename

if __name__=="__main__":

h,p='',12346

server=SocketServer.ThreadingTCPServer((h,p),myserver)

server.serve_forever()

server.shutdown()

运行截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值