使用python指令碼傳遞引數:(三種方式可收藏)

2022-12-05 18:01:19

背景:使用python指令碼傳遞引數在實際工作過程中還是比較常用,以下提供了好幾種的實現方式:

一、使用sys.argv的陣列傳入
說明:使用sys.argv必須按照先後的順序傳入對應的引數;sys.argv則封裝了傳入的引數資料,作為陣列的方式已經傳入

import sys

print("傳入引數的總長度為:", len(sys.argv))
print("type:", type(sys.argv))
print("function name:", sys.argv[0])
try:
    print("第一個傳入的引數為:", sys.argv[1])
    print("第二個傳入的引數為:", sys.argv[2])
except Exception as e:
    print("Input Error:", e)

通過命令列檢視執行結果:

 

二、使用argparse包傳入

說明:parser.add_argument 方法的type引數理論上可以是任何合法的型別,而且傳入的順序並沒有要求

引數使用的說明:

--xx  完整引數輸入
-x    簡寫引數輸入
type  輸入的引數將要被轉換的資料型別
default 預設值
help   引數介紹
nargs  可傳入的引數數量
required  是否為必須引數
import argparse
parser = argparse.ArgumentParser(description='argparse testing')
parser.add_argument('--name','-n',type=str, default = "bk",required=True,help="a programmer's name")
parser.add_argument('--age','-a',type=int, default=35,help='age of the programmer')
parser.add_argument('--sex','-s',type=str, default='male')
parser.add_argument('--favorite','-f',type=str, nargs="+",required=False,help="favorite of the programmer")

args = parser.parse_args()
print(args.name)
print(args.age)
print(args.sex)
print(args.favorite)

檢視執行結果:

1.使用完整引數輸入

2.使用簡寫引數輸入

3.多引數的傳入

 

三、使用shell指令碼的方式向python指令碼傳遞引數

1.使用shell指令碼向python指令碼傳遞引數

python指令碼依然使用sys.argv的陣列的方式傳入引數

原python如下:(python_test.py)

import sys

print("傳入引數的總長度為:", len(sys.argv))
print("type:", type(sys.argv))
print("function name:", sys.argv[0])
try:
    print("第一個傳入的引數為:", sys.argv[1])
    print("第二個傳入的引數為:", sys.argv[2])
except Exception as e:
    print("Input Error:", e)

增加shell指令碼如下:(shell_test.sh)

#!/bin/bash
#定義變數
para1=$1
para2=$2
python python_test.py $para1 $para2

檢視執行結果:

2.使用shell指令碼向python指令碼內的方法傳遞引數

python指令碼如下:(python_test.py)

def fun1():
    return "無引數方法fun1"

def fun2(x):
    return f"有引數方法fun2且傳入的引數為{x}"

shell指令碼如下:(shell_test.sh)

(1)無引數方式呼叫:

#!/bin/bash
#定義變數
python -c 'import python_test;print(python_test.fun1())'

檢視執行結果:

 (2)有引數方式呼叫

#!/bin/bash
#定義變數
para=$1
python -c "import python_test;print(python_test.fun2('${para}'))"

檢視執行結果:

 (3)一次呼叫所有方法,放入一個集合中,再呼叫切割方法獲取相應的值

#!/bin/bash
#定義變數
para=$1
#將結果儲存為一個變數ALL_RESULTS內
ALL_RESULTS=$(python -c "import python_test;print(python_test.fun1(),python_test.fun2('${para}'))")
#分別列印第一個方法的返回與第二個方法的返回
RESULTS_fun1=$(echo $ALL_RESULTS | cut -d' ' -f1)
RESULTS_fun2=$(echo $ALL_RESULTS | cut -d' ' -f2)
echo fun1方法的返回結果為:$RESULTS_fun1
echo fun2方法的返回結果為:$RESULTS_fun2

檢視執行結果: