嗨,我是这个社区的新手,也是Python的新手,对其他高级语言有经验,但有些生疏,所以我的问题很简单
我制作了一个简单的脚本来连接到私有ftp服务器,并从中检索每日信息
from ftplib import FTP
#Open ftp connection
#Connect to server to retrieve inventory
#Open ftp connection
def FTPconnection(file_name):
ftp = FTP('ftp.serveriuse.com')
ftp.login('mylogin', 'password')
#List the files in the current directory
print("Current File List:")
file = ftp.dir()
print(file)
# # #Get the latest csv file from server
# ftp.cwd("/pub")
gfile = open(file_name, "wb")
ftp.retrbinary('RETR '+ file_name, gfile.write)
gfile.close()
ftp.quit()
FTPconnection('test1.csv')
FTPconnection('test2.csv')
这就是整个脚本,它传递我的凭据,然后对我正在检索的两个不同文件调用函数FTPconnection
然后,我处理它们的另一个脚本有一个import语句,因为我试图将这个脚本作为一个模块调用,我的import所做的只是连接到FTP服务器并获取信息
import ftpconnect as ftpc
这是另一个Python脚本上进行处理的脚本。 它可以工作,但我想改进它,所以我需要一些关于如何做到这一点的最佳实践的指导,因为在Spyder 4.1.5中,我得到了一个“模块ftpconnect called but unused”警告。。。所以我可能遗漏了一些东西,我正在使用Anaconda和Python3.8.5在MacOS上开发
我正在尝试构建一个应用程序,以自动化一些任务,但我找不到任何关于模块的信息来指导我编写更好的代码,它只是说你必须导入你所使用的任何.py文件名,这将被视为一个模块。。。 我的最后一个问题是,您通常如何保护私有信息(ftp凭据)不被公开?这与保护我的代码无关,只是保护凭据
Python程序需要使用一些选项来存储密码和其他机密,特别是需要在后台运行的程序,它不能要求用户输入密码
应避免的问题:
选项1:SSH
这并不总是一个选择,但它可能是最好的。您的私钥永远不会通过网络传输,SSH只是运行数学计算来证明您拥有正确的密钥
为了使其正常工作,您需要以下几点:
备选案文2:环境变量
这是最简单的一个,所以它可能是一个很好的起点。它在Twelve Factor App中描述得很好。基本思想是,源代码只需从环境变量中提取密码或其他机密,然后在运行程序的每个系统上配置这些环境变量。如果您使用对大多数开发人员都适用的默认值,那么这也可能是一个不错的选择。您必须平衡这一点,使您的软件“默认安全”
下面是一个从环境变量中提取服务器、用户名和密码的示例
查找如何在操作系统中设置环境变量,并考虑在自己的帐户下运行该服务。这样,当您在自己的帐户中运行程序时,环境变量中就不会有敏感数据。当您设置这些环境变量时,请格外小心,以免其他用户无法读取它们。例如,检查文件权限。当然,任何具有root权限的用户都可以读取这些文件,但这是没有帮助的。如果您使用的是systemd,请查看service unit,并小心使用EnvironmentFile
而不是Environment
来获取任何机密Environment
值可由任何使用systemctl show
的用户查看选项3:配置文件
这与环境变量非常相似,但您可以从文本文件中读取机密。我仍然发现环境变量对于部署工具和持续集成服务器等方面更灵活。如果决定使用配置文件,Python在标准库中支持多种格式,如JSON、INI、netrc和XML。您还可以找到像PyYAML和TOML这样的外部包。就我个人而言,我觉得JSON和YAML最容易使用,YAML允许注释
使用配置文件考虑的三件事情:
~/.my_app
这样的默认位置,以及使用不同位置的命令行选项李>选项4:Python模块
有些项目只是将它们的秘密直接放入Python模块中
然后导入该模块以获取值
使用这种技术的一个项目是Django。显然,您不应该将
settings.py
提交给源代码管理,尽管您可能希望提交一个名为settings_template.py
的文件,用户可以复制和修改该文件我发现这种技术有一些问题奎:
.gitignore
中可以降低这种风险李>如果您的项目已经使用了这种技术,那么很容易转换为环境变量。只需将所有设置值移动到环境变量,并将Python模块更改为从这些环境变量读取
相关问题 更多 >
编程相关推荐