python之argparse 解析器,用於命令行參數。

中間第三步參考了https://www.cnblogs.com/lindaxin/p/7975697.html

其餘原創

1.作用:把命令行的參數傳入到.py文件中,使python文件執行的內容、操作的對象更靈活。

2.使用方法:三步走

import argparse
#1.創建解析器
parser=argparse.ArgumentParser()
#2.增加參數
parser.add_argument('name',default='lmx')
#3.解析參數
args=parser.parse_args()
print(args.name)
#記憶方法:argument這裏可以理解爲實參的意思,parse是解析,parser是名詞解析器,就好記一些了。

3.add_argument(' ')用法

ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])
#1.name就是添加參數的名字
#2.action 就是數據傳入後,對其進行的操作,默認爲store
         #還有store_const,append,append_const,count
              #store_const,表示賦值爲const;
              #append,將遇到的值存儲成列表,也就是如果參數重複則會保存多個值;
              #append_const,將參數規範中定義的一個值保存到一個列表;
              #count,存儲遇到的次數;此外,也可以繼承 argparse.Action 自定義參數解析;
#3.nargs  就是命令行傳入參數的個數,可以用數字表示,也可以用?表示,*號表示0/以上個參數,+號表示1/以上個參數。當不指定值時對於 Positional argument 使用 default,對於 Optional argument 使用 const
#4.const 
#5.default 默認的參數值
#6.type,數值應該轉換爲的類型
#7.choices   ???參數可允許的值的一個容器。
#8.required  可選參數是否可以忽略,僅針對可選參數
#9.help 顯示的幫助信息
#10.metavar  在usage裏顯示的參數名字,positional parame顯示的是本來的名字,optional parameter顯示的是大寫的名字
#11.dest 解析後的參數名稱

4.記憶流圖

5.實例分析

位置參數是不需要加上名字的,直接賦值即可。

可選參數,要想賦值,一定要在值前面加上名字。如果可選參數沒寫名字,沒賦值,即選默認參數。

import argparse
 
#位置參數
parser=argparse.ArgumentParser()
#parser.add_argument('name', default='lmx')
 
parser.add_argument('task', default='ctdet',
                             help='ctdet | ddd | multi_pose | exdet')
args=parser.parse_args()
print(args.task)
 
結果:
studieren@studieren-GS65-Stealth-Thin-8RE:~/PycharmProjects/untitled$ python3 test.py task xixi
usage: test.py [-h] task
test.py: error: unrecognized arguments: xixi
studieren@studieren-GS65-Stealth-Thin-8RE:~/PycharmProjects/untitled$ python3 test.py xixi
xixi
 
 
 
#可選參數
parser=argparse.ArgumentParser()
#parser.add_argument('name', default='lmx')
 
parser.add_argument('--task', default='ctdet',
                             help='ctdet | ddd | multi_pose | exdet')
args=parser.parse_args()
print(args.task)
 
結果:
studieren@studieren-GS65-Stealth-Thin-8RE:~/PycharmProjects/untitled$ python3 test.py xixi
usage: test.py [-h] [--task TASK]
test.py: error: unrecognized arguments: xixi
studieren@studieren-GS65-Stealth-Thin-8RE:~/PycharmProjects/untitled$ python3 test.py --task xixi
xixi
studieren@studieren-GS65-Stealth-Thin-8RE:~/PycharmProjects/untitled$ python3 test.py
ctdet

還有一個比較有意思的點。

args=''
if args == '':
    opt = parser.parse_args()
else:
    opt = parser.parse_args(args)
print(opt)
#這個解析還加了參數,是啥意思?那個文件還沒看完,明天來補。

ROS向節點傳遞參數的方法總結(rosrun,launch) + (參數服務器,main函數參數)

參考鏈接:https://blog.csdn.net/u013834525/article/details/88744327

這裏記錄兩點

1.用roslaunch+參數服務器傳遞參數:注意參數要在node之間;這裏的參數沒有寫type類型。

<launch>

    <arg name="image_topic" default="/kitti/camera_color_left/image_raw"/>
    <arg name="output_image" default="/lane_images"/>
    <arg name="output_lane" default="/Lane"/>
    <!-- <arg name="weight_path" default="$(find lane_detector)/model/tusimple_lanenet/tusimple_lanenet_vgg_2018-10-19-13-33-56.ckpt-200000"/> -->
    <arg name="weight_path" default="$(find lane_detector)/model/new_model/tusimple_lanenet.ckpt"/>

    <arg name="use_gpu" default="1"/>
    <arg name="lane_image_topic" default="/lane_image"/>

    <node pkg="lane_detector" type="lanenet_node.py" name="lanenet_node" output="screen">
        <param name="image_topic" value="$(arg image_topic)" />
        <param name="output_image" value="$(arg output_image)" />
        <param name="output_lane" value="$(arg output_lane)" />
        <param name="weight_path" value="$(arg weight_path)" />
        <param name="use_gpu" value="$(arg use_gpu)" />
        <param name="lane_image_topic" value="$(arg lane_image_topic)" />
    </node>
</launch>

2.用roslaunch+main進行參數傳遞

ps 這兩種我都接觸過,但是那兩種沒太看懂咋用。

還是用第一種吧,比較熟悉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章