python自写软件(一)
寒假因为疫情闲的无聊,自学了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 设置应用图标
所望隔山海