在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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
浅谈python中的__init__、__new__和__call__方法
Jul 18 Python
django实现前后台交互实例
Aug 07 Python
解决python报错MemoryError的问题
Jun 26 Python
python 统计数组中元素出现次数并进行排序的实例
Jul 02 Python
图文详解python安装Scrapy框架步骤
May 20 Python
Python的log日志功能及设置方法
Jul 11 Python
python批量修改ssh密码的实现
Aug 08 Python
wxPython修改文本框颜色过程解析
Feb 14 Python
python+selenium+Chrome options参数的使用
Mar 18 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
Python HTMLTestRunner如何下载生成报告
Sep 04 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学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
jquery星级插件、支持页面中多次使用
2012/03/25 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
php利用curl获取远程图片实现方法
2015/10/26 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
python采集微信公众号文章
2018/12/20 Python
Python itertools.product方法代码实例
2020/03/27 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
品管员岗位职责
2013/11/10 职场文书
应届大学毕业生找工作的求职信范文
2013/11/29 职场文书
教师队伍管理制度
2014/01/14 职场文书
中文专业自荐书
2014/06/29 职场文书
国际贸易求职信
2014/07/05 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
2016年情人节广告语
2016/01/28 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS