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 设置应用图标

 

 

 

 

 

 

posted @ 2020-04-23 15:53  世界を変える御宅族  阅读(1055)  评论(0编辑  收藏  举报