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

 更新时间:2021年05月12日 14:57:40   作者:哦摩西罗伊  
这篇文章主要介绍了在python中实现导入一个需要传参的模块,具有很好的参考价值,希望可以给大家一个参考,以后在遇到这种的情况的时候,知道如何应对

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

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

我们期望的解决办法是通过命令行传参来解决这个问题,因为接下来是需要编写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

运行:

我们可以通过改变命令行的参数来改变这个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()

可是运行后发现出错:

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

回头查看被调用模块,

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

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

相关文章

  • python实现随机森林random forest的原理及方法

    python实现随机森林random forest的原理及方法

    本篇文章主要介绍了python实现随机森林random forest的原理及方法,详细的介绍了随机森林的原理和python实现,非常具有参考价值,有兴趣的可以了解一下
    2017-12-12
  • python离线安装外部依赖包的实现

    python离线安装外部依赖包的实现

    今天小编就为大家分享一篇python离线安装外部依赖包的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python爬虫租房信息在地图上显示的方法

    python爬虫租房信息在地图上显示的方法

    这篇文章主要介绍了python爬虫租房信息在地图上显示的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python中hash加密简介及使用方法

    Python中hash加密简介及使用方法

    常见 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法,接下来通过本文给大家介绍Python中hash加密简介及使用方法,感兴趣的朋友一起看看吧
    2022-01-01
  • numpy库reshape用法详解

    numpy库reshape用法详解

    这篇文章主要介绍了numpy库reshape用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 深入了解Python中反射和动态属性的无限可能

    深入了解Python中反射和动态属性的无限可能

    理解 Python 中的反射和动态属性是编写灵活和强大程序的关键,在这篇文章中,小编将带领大家一起反射和动态属性的概念,并提供大量示例代码,希望对大家有所帮助
    2023-11-11
  • python内打印变量之%和f的实例

    python内打印变量之%和f的实例

    今天小编就为大家分享一篇python内打印变量之%和f的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python3.5基础之NumPy模块的使用图文与实例详解

    Python3.5基础之NumPy模块的使用图文与实例详解

    这篇文章主要介绍了Python3.5基础之NumPy模块的使用,结合图文与实例形式详细分析了Python3.5中Numpy模块的原理、功能、使用方法及操作注意事项,需要的朋友可以参考下
    2019-04-04
  • python 中的divmod数字处理函数浅析

    python 中的divmod数字处理函数浅析

    这篇文章主要介绍了python divmod数字处理函数的相关资料,感兴趣的朋友一起看看吧
    2017-10-10
  • python浅拷贝与深拷贝使用方法详解

    python浅拷贝与深拷贝使用方法详解

    浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联
    2022-11-11

最新评论