在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中SocketServer模块处理网络请求的用法
Jun 28 Python
python爬取m3u8连接的视频
Feb 28 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
基于Django与ajax之间的json传输方法
May 29 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
Aug 13 Python
基于python 取余问题(%)详解
Jun 03 Python
Python 基于jwt实现认证机制流程解析
Jun 22 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
python 提高开发效率的5个小技巧
Oct 19 Python
如何通过python检查文件是否被占用
Dec 18 Python
sklearn中的交叉验证的实现(Cross-Validation)
Feb 22 Python
Python sklearn分类决策树方法详解
Sep 23 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 switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
vue实现购物车列表
2020/06/30 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
python调用shell的方法
2013/11/20 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
软件测试面试题
2014/01/05 面试题
面试后感谢信怎么写
2014/02/01 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
租房协议书样本
2014/08/20 职场文书
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers