寒假因為疫情閑的無聊,自學了Python,隨便跟了幾節課就入手了
群里大佬都在學c++,我java那本書已經看完了,我的筆記本 (Web 視圖)不知道能不能打開。
python的庫多,語法簡單,然后又學了一些自帶庫和第三方庫,之后可能要學matplotlib或者numpy,pyqt5還在學,但是想要實現的輪子有很多
先把地址附上myftp(github地址)
這實現了命令行的文件傳輸,用了paramiko庫 (cmd下載命令:pip install -i https://pypi.douban.com/simple paramiko)
1 import time 2 from get import ssh_server_get 3 from put import ssh_server_put 4 5 ip_or_hostname = input("$ 請輸入目標服務端的ip或主機名:\n$ ") 6 print("請檢查服務器端口22是否打開(未配置的需要配置ssh服務,詳請百度)") 7 # TODO 提示 8 # 用命令行模塊給參數 9 time.sleep(2) 10 username = input("$ 請輸入用戶名:\n$ ") 11 time.sleep(2) 12 password = input("$ 請輸入登錄密碼:\n$ ") 13 time.sleep(2) 14 action = input("$ 請選擇執行的操作:g/p:\n$ ") 15 while (not (action == "g")) and (not (action == "p")): 16 action = input("$ 輸入錯誤,請重新輸入:g/p\n$ ") 17 time.sleep(2) 18 print("您的操作是:%s " % action) 19 # 若未輸入則默認地址 20 # 用命令行模塊給參數 21 if action == "g": 22 remote_address = input("$ 輸入需要從目標服務端下載的文件的地址:\n$ ") 23 while remote_address is None: 24 remote_address = input("$ 請重新輸入,不得為空:\n$ ") 25 address = input("$ 輸入獲得的文件存放地址(為空則為當前目錄地址):\n$ ") 26 print("正在執行操作-- %s " % action) 27 ssh_server_get(ip_or_hostname, username, password, address, remote_address) 28 29 elif action == "p": 30 address = input("$ 輸入需要上傳的文件地址:\n$ ") 31 while address is None: 32 address = input("$ 請重新輸入,不得為空:\n$ ") 33 remote_address = input("$ 輸入目標服務端存放文件的地址(為空則為默認地址\home\yourhostname):\n$ ") 34 print("正在執行操作-- %s " % action) 35 ssh_server_put(ip_or_hostname, username, password, address, remote_address) 36 37 time.sleep(2) 38 print("操作完成")
這里是做初始化工作,因為要做的像這個軟件,端口號已經寫了22,因為是命令行,本來想做成動態動畫用progress庫,用asyncio協程也不知道怎么做,知道的大佬告訴我怎么邊等待傳輸邊顯示動畫
import os import sys import paramiko from os.path import split, join from os import sep def ssh_server_put(ip_or_hostname: str, username: str, password: str, address: str, remote_address: str) -> None: transport = paramiko.Transport((ip_or_hostname, 22)) transport.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(transport) if remote_address is None: name = username file = split(address)[-1] path = join('/home', name, file) try: sftp.put(address, path) except Exception as e: print("無法連接遠程服務端,請檢查輸入:") sys.exit(-1) else: try: sftp.put(address, join(remote_address, split(address)[-1])) except Exception as e: print("無法連接遠程服務端,請檢查輸入:") sys.exit(-1) sftp.close()
先創建transport 然后創建連接sftp
import paramiko from os.path import split import sys def ssh_server_get(ip_or_hostname: str, username: str, password: str, address: str, remote_address: str) -> None: transport = paramiko.Transport((ip_or_hostname, 22)) transport.connect(username=username, password=password) sftp = paramiko.SFTPClient.from_transport(transport) # sftp.put("1.txt","/home/siuwhat/Desktop/1.txt") if address is None: try: sftp.get(remote_address, split(remote_address)[-1]) except Exception as e: print("無法連接遠程服務端,請檢查輸入:") sys.exit(-1) else: try: sftp.get(remote_address, address + split(remote_address)[-1]) except Exception as e: print("無法連接遠程服務端,請檢查輸入:") sys.exit(-1) sftp.close()
差不多的
然后使用pyinstaller,跟paramiko一個下載鏈接,把庫名換了就好,如果不信就在-i 后加庫名
這是pyinstaller命令
-F 打包成一個exe
-w(這里沒用到)不彈出cmd
-i 設置應用圖標