在Python文件之间传递命令行变量。完全卡住了

时间:2013-08-26 18:46:07

标签: python variables import command

我有一个非常简单的问题,一个简单的解决方案就在我无法触及的范围内。

我的设置:

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

参数文件有6个变量,包括服务器IP,登录,传递等。

驱动程序文件有一个praser,它读取属性文件并填充空白。

  

driver.py paramtersfile.csv

这很好用。但是,我在参数文件中添加了一个PORT变量,需要看到B)连接文件。永远不会显式调用此连接文件,而只是将其导入到驱动程序文件中以获取其连接和cookie方法。

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

谢谢stackoverflow社区

编辑:

我使用显而易见的方法将参数传递给我需要的任何模块/文件的类(self.foo)。

我之前的问题是这个想法:

您可以执行类似

的操作

loadproperties(propertiesfile)

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

导入属性加载器

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

看起来非常方便

url = propertyloader.url

而不是

类连接(主机,端口,传递,网址):

自我。网址 = 网址

loader = requests(安全,网址

等等等等等等。

似乎是一种在头衔的不同部分之间共享通用参数的无头痛方式。

也许还有办法(额外的信用问题)

1 个答案:

答案 0 :(得分: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传递给您想要的服务器即可!