0

我有一个看似非常简单的问题,但我无法提供一个简单的解决方案。

我的设置:

A) 驱动文件(运行测试脚本) B) 连接文件(使用请求) C) 参数文件

参数文件有 6 个变量,包括服务器 IP、登录名、密码等。

Driver 文件有一个 praser,它读取属性文件并填写空白。

driver.py 参数文件.csv

这工作正常。但是,我在 B) 连接文件需要查看的参数文件中添加了一个 PORT 变量。这个连接文件永远不会被显式调用,而只是导入到驱动程序文件中,用于连接和 cookie 方法。

如何将解析的变量(来自 sys.argv)从 paramtersfile.csv 转移到 Connections 文件(或用于运行我的脚本的任何其他文件?

谢谢stackoverflow社区

编辑:

我使用将参数传递到我需要的任何模块/文件的类(self.foo)的明显方式让它工作。

我之前的问题是这样的:

你做类似的事情

加载属性(属性文件)

然后从你可以做的任何其他python脚本

导入属性加载器

这会将不可变属性列表加载到当前空间中

看起来很方便

url = 属性加载器.url

代替

类连接(主机、端口、通行证、网址):

自己。网址=网址

加载器 = 请求(安全,网址

等等等等等等...

在脚本的不同部分之间共享公共参数似乎是一种不费吹灰之力的方式。

也许还有办法做到这一点(额外的信用问题)

4

1 回答 1

0

从 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
MY_SERVER = ??? #WHAT DO I SET THIS TO?

class Connection:
    def __init__(self):
        self.server = MY_SERVER

def connect():
    connection = Connection() #create a new connection object

上面的代码设计得不好,因为你定义了一个一开始MY_SERVER就不应该在那里定义的变量!连接类不知道也不关心它应该使用什么服务器,它应该与任何服务器一起工作。那么你从哪里得到服务器变量呢?您通过构造函数或方法传入它。你可以这样做:

#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

通过这种设计,Connection 对象变得更加灵活。它基本上是在说“我是一个可以处理任何服务器的连接对象。如果你想使用我,请告诉我你想使用什么服务器!”。

这样,在您的驱动程序文件中,您可以首先从您的 csv 解析服务器,然后connections.connect通过传递您想要的服务器来简单地调用该方法!

于 2013-08-26T19:08:56.340 回答