在Python文件之间传递命令行变量。完全卡住
我有一个看起来很简单的问题,有一个我力所能及的简单解决方案 我的设置: A) 驱动程序文件(运行测试脚本) B) 连接文件(使用请求) C) 参数文件 参数文件有6个变量,包括服务器IP、登录名、密码等 驱动程序文件有一个praser,它读取属性文件并填充空格 driver.py parametersfile.csv 这个很好用。但是,我在参数文件中添加了一个端口变量,它需要被B)连接文件看到。此连接文件从未被显式调用,而只是导入到驱动程序文件中,用于其连接和cookie方法 如何将解析的变量(从sys.argv)从parametrsfile.csv传递到连接文件(或用于运行脚本的任何其他文件) 谢谢你,我的社区 编辑: 我使用了一种显而易见的方法,将参数传递到我需要的任何模块/文件的类(self.foo)中 我以前提出的问题大致是这样的: 你做的事情 loadproperties(propertiesfile) 然后,从任何其他python脚本,您都可以 导入属性加载程序 将不可变属性列表加载到当前空间 这样做似乎很方便 url=propertyloader.url 而不是 类连接(主机、端口、通道,url): self.url=url 加载器=请求(安全,url) 废话废话 在脚本的不同部分之间共享公共参数似乎是一种令人头痛的方式在Python文件之间传递命令行变量。完全卡住,python,variables,import,command,Python,Variables,Import,Command,我有一个看起来很简单的问题,有一个我力所能及的简单解决方案 我的设置: A) 驱动程序文件(运行测试脚本) B) 连接文件(使用请求) C) 参数文件 参数文件有6个变量,包括服务器IP、登录名、密码等 驱动程序文件有一个praser,它读取属性文件并填充空格 driver.py parametersfile.csv 这个很好用。但是,我在参数文件中添加了一个端口变量,它需要被B)连接文件看到。此连接文件从未被显式调用,而只是导入到驱动程序文件中,用于其连接和cookie方法 如何将解析的变量(
也许还有一种方法可以做到这一点(额外的信用问题)从driver.py文件中,将连接文件作为模块导入,并将解析的参数传递给模块内的方法。类似于以下内容:
#===inside driver.py===
import connections
params = parseFile(sys.argv) #get parameters from the csv file that is passed to the command line
connections.connect(params) #pass them to whatever method you need to call from connections
#connections.py
class Connection:
def __init__(self, server):
self.server = server
def connect(server):
connection = Connection(server) #create a new connection object with the server passed to the method
编辑:听起来你没有以模块化的方式编写代码。你应该停止以文件的形式来思考代码,而是以模块的形式来思考代码:可以在许多不同地方使用的可互换代码的比特和片段。我看到的设计的主要缺陷(如果我没有正确理解,请原谅)是您在用于创建连接对象的连接文件中硬编码了一个值。我猜这就是您的代码的样子(或者至少充分体现了代码的精神):
上面的代码设计得不好,因为您正在定义一个变量MY_SERVER
,而这个变量本来就不应该在这里定义!connections类不知道或不关心它应该使用什么服务器,它应该与任何服务器一起工作。那么您从哪里获得服务器变量呢?您可以通过构造函数或方法传递它。您可以这样做大概是这样的:
#===inside driver.py===
import connections
params = parseFile(sys.argv) #get parameters from the csv file that is passed to the command line
connections.connect(params) #pass them to whatever method you need to call from connections
#connections.py
class Connection:
def __init__(self, server):
self.server = server
def connect(server):
connection = Connection(server) #create a new connection object with the server passed to the method
通过这种设计,连接对象变得更加灵活。它基本上是说“我是一个可以处理任何服务器的连接对象。如果你想使用我,请告诉我你想使用哪台服务器!”
这样,在驱动程序文件中,您可以首先从csv解析服务器,然后简单地调用方法
connections.connect
,将它传递给所需的服务器!感谢您的回复:但是-连接文件在任何类和方法之外都有一个变量,即服务器用来构建的server=ip:portd连接对象。所以我想我的困惑是我应该将server=设置为什么?这个想法类似于server=driver.praseFile(sys.argv)但是如果从连接文件中调用,那是不行的,因为驱动程序没有被导入。我已经更新了我的答案。希望我正确地理解了你的问题。如果有什么不清楚的地方,请告诉我。编辑:再次感谢拉纳鲁。我正在接受你的建议并尝试。再次感谢你花时间写出你的答案r详细的回答。当然!如果答案行得通,一定要接受。:)拉纳鲁,恐怕我已经耗尽了你的好意,但如果你能用几句话(可能或不可能,容易或不容易)回答我对原始问题的修改,我会非常高兴。非常感谢。