在python中实现导入一个需要传参的模块


Posted in Python onMay 12, 2021

最近跑实验,遇到了一个问题:

由于实验数据集比较多,每次跑完一个数据集就需要手动更改文件路径,再将文件传到服务器,再运行实验,这样的话效率很低,必须要专门看着这个实验,啥时候跑完就手动修改运行下一个实验。我个人无法忍受这样低效率,就想能不能有什么解决的办法。

我们期望的解决办法是通过命令行传参来解决这个问题,因为接下来是需要编写shell脚本来批量运行实验,如果用输入语句的方式显得太笨拙。

在编写实验代码的时候,我将所有的参数集中到一个py文件中,这样便于后期的维护,现在的问题就是需要通过命令行传参的方式改变该文件中的某些值。

关于传参,python中提供了argparse这一模块。通过这个模块 就能很快的实现命令行传参的功能。

下面举个例子:

文件test1.py

import argparse
from 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

运行:

在python中实现导入一个需要传参的模块

我们可以通过改变命令行的参数来改变这个name的值,其实关于这一点也比较好理解,我们可以想成python将这三份代码拼接在一起,再一起执行。

这样就实现了我刚才想要的功能。

补充:python调用模块时传参出错的解决方案

首先定义了一个Login模块

传参是两个:username,password

#coding=utf-8
def 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-8
from selenium import webdriver
import unittest,time
from public import Login
class 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.driver
        driver.get(self.base_url)
        Login.login(self,"jinbian3333","jinbian76")#传参是这两个
        text=driver.find_element_by_id("spnUid").text
        self.assertEqual(text,"jinbian3333@126.com")
        Login.logout(self)
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
if __name__ == '__main__':
    unittest.main()

可是运行后发现出错:

在python中实现导入一个需要传参的模块

明明传参是"jinbian3333","jinbian76",为什么登录信息是图中呢?

回头查看被调用模块,

在python中实现导入一个需要传参的模块

按我理解就是 加了" " 就不是变量了,是常量了, 你调用了该模块,即使传参 它还是按照模块本身的设置:“username”"password"运行

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python  __getattr__与__setattr__使用方法
Sep 06 Python
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
python动态性强类型用法实例
May 09 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
Python3中对json格式数据的分析处理
Jan 28 Python
Pygame Event事件模块的详细示例
Nov 17 Python
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
PyTorch 如何设置随机数种子使结果可复现
May 12 #Python
Python Parser的用法
May 12 #Python
pytorch MSELoss计算平均的实现方法
May 12 #Python
Django如何创作一个简单的最小程序
May 12 #Python
Pytorch中TensorBoard及torchsummary的使用详解
pytorch 一行代码查看网络参数总量的实现
May 12 #Python
You might like
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
php数组添加元素方法小结
2014/12/20 PHP
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
js中url对象化管理分析
2017/12/29 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
express启用https使用小记
2019/05/21 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[00:47]TI7不朽珍藏III——沙王不朽展示
2017/07/15 DOTA
python常用函数详解
2016/09/13 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
用matplotlib画等高线图详解
2017/12/14 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
浅谈python之高阶函数和匿名函数
2019/03/21 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
如何在Django中使用聚合的实现示例
2020/03/23 Python
python 如何调用远程接口
2020/09/11 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
全陪导游欢迎词
2014/01/17 职场文书
化学工程专业求职信
2014/08/10 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
java高级用法JNA强大的Memory和Pointer
2022/04/19 Java/Android