Python中使用os模組執行遠端命令

2022-05-31 14:15:14 字數 3457 閱讀 3774

在python中使用os模組或者subprocess模組執行遠端命令,並把執行結果傳送給客戶端的時候,會發生黏包現象,這是因為服務端傳送的資料量大,客戶端一次收的資料量小導致快取中的內容沒有讀取完,下次接著執行命令時,還會接著從快取中讀取內容,這時就會發生黏包現象。

1. 使用os模組遠端執行命令

服務端**

1 importsocket

2 importos

3 4 sh_server = socket.socket() #建立乙個socket物件

5 sh_server.setsockopt(socket.sol_socket,socket.so_reuseaddr,1) #重置ip和埠

6 sh_server.bind(('127.0.0.1',8001)) #繫結伺服器ip和埠

7 sh_server.listen(5) #設定最大監聽數

8 9 while true: #鏈結迴圈

10 conn,addr = sh_server.accept() #阻塞,等待客戶端過來鏈結

11 12 while true: #通訊迴圈

13 # 接收客戶端傳送過來的訊息

14 cmd = conn.recv(buffer_size).decode('utf-8')

15 #使用os模組中的popen遠端執行命令

16 data =os.popen(cmd)

17 res_msg=data.read()

18 #執行結果傳送給客戶端

19 conn.send(res_msg.encode('gbk'))

20 print(res_msg)

21 print(len(res_msg))

22 conn.close()

23

客戶端**

1 importsocket

2 3 sh_client = socket.socket() #建立socket物件

4 sh_client.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)

5 6 sh_client.connect(('127.0.0.1',8001)) #鏈結服務端

7 8 while true: #通訊迴圈

9 cmd = input("請輸入要執行的命令:")

10 if cmd == '': continue

11 if cmd =='exit' or cmd =='quit':break

12 sh_client.send(cmd.encode('utf-8'))

13 res_info = sh_client.recv(1024).decode('gbk')

14 print('命令執行結果是:',res_info)

15 sh_client.close()

2. 使用subprocess模組執行遠端命令

服務端**

1 importsocket

2 importsubprocess

3 4 sh_server =socket.socket()

5 sh_server.setsockopt(socket.sol_socket,socket.so_reuseaddr,1) #重置ip和埠

6 sh_server.bind(('127.0.0.1',8001))

7 sh_server.listen(5)

8 9 while true: #鏈結迴圈

10 conn,addr = sh_server.accept() #阻塞,等待客戶端過來鏈結

11 print('客戶端資訊',conn,addr)

12 13 while true: #通訊迴圈

14 # 接收客戶端傳送過來的訊息

15 print('----------接收命令')

16 cmd = conn.recv(buffer_size).decode('utf-8')

17 print('要執行的命令是:',cmd)

18 if cmd == 'exit' or cmd == 'quit':break

19 #使用subprocess模組執行遠端命令

20 ret = subprocess.popen(cmd,shell=true,

21 stdout =subprocess.pipe,

22 stderr =subprocess.pipe,

23 stdin =subprocess.pipe)

24 25 err =ret.stderr.read()

26 iferr:

27 ret_msg =err

28 else:

29 ret_msg =ret.stdout.read()

30 if notret_msg:

31 ret_msg = "命令執行成功".encode('gbk')

32 print('---------命令執行完成')

33 conn.send(ret_msg)

34

35 conn.close()

客戶端**

1 importsocket

2 3 sh_client =socket.socket()

4 sh_client.setsockopt(socket.sol_socket,socket.so_reuseaddr,1)

5 6 sh_client.connect(('127.0.0.1',8001))

7 8 while true: #通訊迴圈

9 cmd = input("請輸入要執行的命令:")

10 if cmd == '': continue

11 if cmd =='exit' or cmd =='quit':break

12 sh_client.send(cmd.encode('utf-8'))

13 res_info = sh_client.recv(1024).decode('gbk')

14 print('命令執行結果是:',res_info)

15 sh_client.close()

python的os模組使用

檢視os的名字 import os print os.name nt,nt 表示windows系統,posix 表示linux系統 檢視os環境變數 import os print os.environ print os.environ.get pat default 檢視變數 pat 若不存在,則...

python模組 OS模組

bin env python coding utf 8 import os print os.name 輸出主機平台 print os.getcwd 輸出當前目錄 print os.listdir os.getcwd 輸出當前目錄的檔案 橫向 for i in os.listdir os.getcw...

python 模組 OS模組

print os.getcwd 輸出 e python workspace 原來 print os.getcwd 輸出 e python workspace 返回上級目錄 os.chdir os.getcwd 輸出 e python 更改 os.chdir r e print os.getcwd 輸...