• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    在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文件目录操作之os模块
    • Python使用scapy模块发包收包
    • Python基础之hashlib模块详解
    • Python collections模块的使用技巧
    • Python使用random模块实现掷骰子游戏的示例代码
    • Python爬虫基础之requestes模块
    • python常见模块与用法
    • python中sys模块的介绍与实例
    • Python中os模块的简单使用及重命名操作
    • python基于concurrent模块实现多线程
    • python xlwt模块的使用解析
    • Pyhton模块和包相关知识总结
    上一篇:详细总结Python类的多继承知识
    下一篇:PyCharm 安装与使用配置教程(windows,mac通用)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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