Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python文件之间传递命令行变量。完全卡住_Python_Variables_Import_Command - Fatal编程技术网

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

在Python文件之间传递命令行变量。完全卡住,python,variables,import,command,Python,Variables,Import,Command,我有一个看起来很简单的问题,有一个我力所能及的简单解决方案 我的设置: A) 驱动程序文件(运行测试脚本) B) 连接文件(使用请求) C) 参数文件 参数文件有6个变量,包括服务器IP、登录名、密码等 驱动程序文件有一个praser,它读取属性文件并填充空格 driver.py parametersfile.csv 这个很好用。但是,我在参数文件中添加了一个端口变量,它需要被B)连接文件看到。此连接文件从未被显式调用,而只是导入到驱动程序文件中,用于其连接和cookie方法 如何将解析的变量(

我有一个看起来很简单的问题,有一个我力所能及的简单解决方案

我的设置:

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

废话废话

在脚本的不同部分之间共享公共参数似乎是一种令人头痛的方式


也许还有一种方法可以做到这一点(额外的信用问题)

从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详细的回答。当然!如果答案行得通,一定要接受。:)拉纳鲁,恐怕我已经耗尽了你的好意,但如果你能用几句话(可能或不可能,容易或不容易)回答我对原始问题的修改,我会非常高兴。非常感谢。