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

作者:哦摩西罗伊 时间:2022-04-08 18:48:24 

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

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

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

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

来源:https://www.cnblogs.com/mlgjb/p/10739112.html

标签:python,导入,传参,模块
0
投稿

猜你喜欢

  • Python 基础知识之字符串处理

    2023-04-22 05:47:55
  • Python学习之yaml文件的读取详解

    2023-04-20 14:06:42
  • 基于python traceback实现异常的获取与处理

    2022-04-05 09:59:32
  • 记一次Vue中$route序列号报错

    2024-05-02 17:04:03
  • python爬虫实现POST request payload形式的请求

    2023-11-07 21:08:55
  • 怎么样才能设计出漂亮的网页?

    2008-10-07 16:57:00
  • SQL Server 2008 阻止保存要求重新创建表的更改问题的设置方法

    2024-01-14 13:53:03
  • 深入解析MySQL索引的原理与优化策略

    2024-01-19 02:29:02
  • pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)

    2023-10-13 11:55:44
  • 利用Python将图片批量转化成素描图的过程记录

    2022-08-21 09:53:59
  • Mysql 原生语句中save or update 的写法汇总

    2024-01-13 15:08:52
  • 如何使用Maxwell实时同步mysql数据

    2024-01-18 01:43:23
  • Java连接数据库步骤解析(Oracle、MySQL)

    2024-01-18 09:42:22
  • php 常用类整理

    2024-05-09 14:46:57
  • Python实现代码统计工具(终极篇)

    2021-10-21 03:01:47
  • Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例

    2022-11-16 04:14:21
  • python label与one-hot之间的互相转换方式

    2022-01-05 07:09:55
  • Ajax+PHP边学边练 之五 图片处理

    2023-11-18 07:21:29
  • Python计算不规则图形面积算法实现解析

    2022-03-14 21:04:17
  • Golang通脉之流程控制详情

    2024-02-20 06:56:34
  • asp之家 网络编程 m.aspxhome.com