在python中實現(xiàn)導(dǎo)入一個需要傳參的模塊
最近跑實驗,遇到了一個問題:
由于實驗數(shù)據(jù)集比較多,每次跑完一個數(shù)據(jù)集就需要手動更改文件路徑,再將文件傳到服務(wù)器,再運行實驗,這樣的話效率很低,必須要專門看著這個實驗,啥時候跑完就手動修改運行下一個實驗。我個人無法忍受這樣低效率,就想能不能有什么解決的辦法。
我們期望的解決辦法是通過命令行傳參來解決這個問題,因為接下來是需要編寫shell腳本來批量運行實驗,如果用輸入語句的方式顯得太笨拙。
在編寫實驗代碼的時候,我將所有的參數(shù)集中到一個py文件中,這樣便于后期的維護,現(xiàn)在的問題就是需要通過命令行傳參的方式改變該文件中的某些值。
關(guān)于傳參,python中提供了argparse這一模塊。通過這個模塊 就能很快的實現(xiàn)命令行傳參的功能。
下面舉個例子:
文件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
運行:
我們可以通過改變命令行的參數(shù)來改變這個name的值,其實關(guān)于這一點也比較好理解,我們可以想成python將這三份代碼拼接在一起,再一起執(zhí)行。
這樣就實現(xiàn)了我剛才想要的功能。
補充:python調(diào)用模塊時傳參出錯的解決方案
首先定義了一個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中調(diào)用該模塊:
#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()
可是運行后發(fā)現(xiàn)出錯:
明明傳參是"jinbian3333","jinbian76",為什么登錄信息是圖中呢?
回頭查看被調(diào)用模塊,
按我理解就是 加了" " 就不是變量了,是常量了, 你調(diào)用了該模塊,即使傳參 它還是按照模塊本身的設(shè)置:“username”"password"運行
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
聊聊pytorch測試的時候為何要加上model.eval()
這篇文章主要介紹了聊聊pytorch測試的時候為何要加上model.eval()的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05OpenCV學(xué)習(xí)之圖像加噪與濾波的實現(xiàn)詳解
這篇文章主要為大家詳細介紹了OpenCV中圖像的加噪與濾波操作的相關(guān)資料,文中的示例代碼簡潔易懂,具有一定的借鑒價值,需要的可以參考一下2023-02-02如何利用Python+OpenCV實現(xiàn)簡易圖像邊緣輪廓檢測(零基礎(chǔ))
輪廓是形狀分析和物體檢測和識別的有用工具,下面這篇文章主要給大家介紹了關(guān)于如何利用Python+OpenCV實現(xiàn)簡易圖像邊緣輪廓檢測(零基礎(chǔ))的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-05-05

YOLOv5車牌識別實戰(zhàn)教程(七)實時監(jiān)控與分析

Python實現(xiàn)Windows和Linux之間互相傳輸文件(文件夾)的方法

Python使用urllib模塊的urlopen超時問題解決方法