033遠程執行命令,033執行命令

來源:互聯網
上載者:User

033遠程執行命令,033執行命令

在伺服器執行命令
之前好像缺了執行命令的模組,現在補上

import  subprocessobj = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)#拿到一個對象,前面是命令,shell設定可以執行指令碼,stdout設定一個進程管道,這裡實際上是有兩個進程,一個是主進程,一個是shell進程x = obj.stdout.read()    # 這裡拿到執行資訊print(str(x,'gbk'))  #  str(x,'utf8')忘記系統是gbk編碼了

 

###遠程執行命令例子:

#指令執行結果短的,不會出現問題

 1 import socket 2 import subprocess 3 def get_server_socket(): 4     sk = socket.socket() 5     server_address = ('127.0.0.1',8888) 6     sk.bind(server_address) 7     sk.listen(5) 8     return sk 9 10 def get_conn(sk):11     print('waitconnect...')12     conn,addr = sk.accept()13     return conn14 15 if __name__ == '__main__':16     sk = get_server_socket()17     conn = get_conn(sk)18     while True:19         try:20             data = conn.recv(1024)##Linux這裡不會報錯,如果強行關閉了conn,data就會變成空,也就是說Linux的直接不try就行了。21         except Exception as e:22             conn = get_conn(sk)23         print(str(data,'utf8'))24         if not data:25             conn = get_conn(sk)26             continue27         sp = subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE)#注意命令要是字串類型28         result = sp.stdout.read()#str(sp.stdout.read(),'gbk')29         conn.send(result)30         print(str(result,'gbk'))31         print('waiting...')32     conn.close()
cmd_server.py
 1 import socket 2  3 def connect_server(): 4     sk = socket.socket() 5     server_address = ('127.0.0.1',8888) 6     sk.connect(server_address) 7     return sk 8  9 if __name__ == '__main__':10     sk = connect_server()11     while True:12         inp = input('>>>')13         if inp == 'exit':14             break15         sk.send(bytes(inp,'utf8'))16         print('waiting...')17         data = sk.recv(1024)18         print(str(data,'gbk'))19     sk.close()
cmd_client.py

 

#指令執行結果較長,無法一次傳遞,改進。傳送檔案的思想。

 1 import  socket 2 import  subprocess 3 def  get_server_socket(): 4     sk = socket.socket() 5     server_address = ('127.0.0.1',8888) 6     sk.bind(server_address) 7     sk.listen(5) 8     return sk 9 def  get_conn(sk):10     print('waitconnect...')11     conn, addr = sk.accept()12     return conn13 14 if __name__ == '__main__':15     sk = get_server_socket()16     conn = get_conn(sk)17     while True:18         try:19             data = conn.recv(1024)##Linux這裡不會報錯,如果強行關閉了conn,data就會變成空,也就是說Linux的直接不try就行了。20         except Exception as e:21             conn = get_conn(sk)22         print(str(data,'utf8'))23         if not data:24             conn = get_conn(sk)25             continue26         sp = subprocess.Popen(str(data,'utf8'),shell=True,stdout=subprocess.PIPE)#注意命令要是字串類型27         result = sp.stdout.read()#讀取內容28         conn.sendall(bytes(str(len(result)),'utf8'))#發送長度29         conn.sendall(result)#發送內容30         print(str(result,'gbk'))31         print('waiting...')32     conn.close()
cmd_server.py
 1 import socket 2 def connect_server(): 3     sk = socket.socket() 4     server_address = ('127.0.0.1',8888) 5     sk.connect(server_address) 6     return sk 7  8 if __name__ == '__main__': 9     sk = connect_server()10     while True:11         inp = input('>>>')12         if inp == '__exit':13             break14         sk.send(bytes(inp,'utf8'))15     print('waiting...')16 17     result_length = int(str(sk.recv(1024),'utf8'))#記錄長度,然後下面接收到相應長度的那內容停止18     data = bytes()19     while  len(data) != result_length:20         r = sk.recv(1024)21         data += r22     print(str(data,'gbk'))23     sk.close()
cmd_client.py

 

####另外兩次連續接收會出現粘包現象

做個隔斷,就是接收方隨便發送一個資料,發送方接受後才繼續發送,這樣子就解決了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.