在python中实现导入一个需要传参的模块
由于实验数据集比较多,每次跑完一个数据集就需要手动更改文件路径,再将文件传到服务器,再运行实验,这样的话效率很低,必须要专门看着这个实验,啥时候跑完就手动修改运行下一个实验。我个人无法忍受这样低效率,就想能不能有什么解决的办法。
我们期望的解决办法是通过命令行传参来解决这个问题,因为接下来是需要编写shell脚本来批量运行实验,如果用输入语句的方式显得太笨拙。
在编写实验代码的时候,我将所有的参数集中到一个py文件中,这样便于后期的维护,现在的问题就是需要通过命令行传参的方式改变该文件中的某些值。
关于传参,python中提供了argparse这一模块。通过这个模块 就能很快的实现命令行传参的功能。
下面举个例子:文件test1.py
import argparsefrom argparse import RawTextHelpFormatter parse = argparse.ArgumentParser(description='The parameters for the feature select method', formatter_class=RawTextHelpFormatter)parse.add_argument(’name’, type = str) args = parse.parse_args() name = args.name
文件test3.py
import test1 str = test1.name + ’asdasdasd’
文件test2.py
import test3 print test3.str运行:
我们可以通过改变命令行的参数来改变这个name的值,其实关于这一点也比较好理解,我们可以想成python将这三份代码拼接在一起,再一起执行。
这样就实现了我刚才想要的功能。
补充:python调用模块时传参出错的解决方案
首先定义了一个Login模块传参是两个:username,password
#coding=utf-8def login(self,username,password): driver=self.driver self.driver.implicitly_wait(30)#不加等待会出错 driver.switch_to.frame(0) driver.find_element_by_class_name('dlemail').clear() driver.find_element_by_class_name(’dlemail’).send_keys('username') driver.find_element_by_class_name(’dlpwd’).clear() driver.find_element_by_class_name(’dlpwd’).send_keys('password') driver.find_element_by_id('dologin').click()def logout(self): driver=self.driver driver.find_element_by_link_text(u'退出').click() driver.quit()在Test.login中调用该模块:
#coding=utf-8from selenium import webdriverimport unittest,timefrom public import Loginclass TestLogin(unittest.TestCase): def setUp(self):self.driver=webdriver.Chrome()self.driver.implicitly_wait(30)self.base_url = 'http://www.126.com/'self.verificationErrors = [] def test_login(self):driver=self.driverdriver.get(self.base_url)Login.login(self,'jinbian3333','jinbian76')#传参是这两个text=driver.find_element_by_id('spnUid').textself.assertEqual(text,'jinbian3333@126.com')Login.logout(self) def tearDown(self):self.driver.quit()self.assertEqual([],self.verificationErrors)if __name__ == ’__main__’: unittest.main()可是运行后发现出错:
明明传参是'jinbian3333','jinbian76',为什么登录信息是图中呢?
回头查看被调用模块,
按我理解就是 加了' ' 就不是变量了,是常量了, 你调用了该模块,即使传参 它还是按照模块本身的设置:“username”'password'运行
以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。如有错误或未考虑完全的地方,望不吝赐教。
相关文章: