Bootstrap

python学习笔记2--shell脚本传参数到python脚本中

环境:ubuntu20.04 python3 vscode

背景:想一键串联多个分析数据脚本,但是面临一个路径传入问题。奈何找了很多shell传参数教程都没有奏效。

1、set方式

1.1材料准备

1.py

import sys
print("脚本1 start") 
print(sys.argv[1])
print(sys.argv[2])
print("脚本1 end")

1.sh

#!/bin/sh
set "test" "1"
python3 1.py $1 $2

给1.sh权限:

chmod +x 1.sh

运行:

ylh@y:~/ros_kinetic_ws/src/test$ ./1.sh 
脚本1 start
test
1
脚本1 end

1.2个人见解

之前参考一些blog定义名称后再传入参数,但是一直没成功,试了试上面方式,居然成功了。感觉这种方式有点不友好,应该有更好方式。下次找到再更新

2、定义变量方式

这种方式解决了上面阅读不友好情况,注意.sh文件=号两侧不能有空格!!!!!

2.1材料准备

1.py

import sys
print("脚本1 start") 
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])
print("脚本1 end")

2.py

import sys
#验证了参数的1,2顺序跟传入顺序相匹配,而不是shell定义的的变量顺序!!!
print("脚本2 start")
print(sys.argv[1])
print(sys.argv[2])
print(sys.argv[3])
print("脚本2 end")

1.sh

#!/bin/sh
a="aaaa" 
b="bbbb"
c=66
python3 1.py "$a" "$b" "$c"
python3 2.py "$b" "$c" "$a"

运行测试:

ylh@y:~/ros_kinetic_ws/src/test$ ./1.sh 
脚本1 start
aaaa
bbbb
66
脚本1 end
脚本2 start
bbbb
66
aaaa
脚本2 end

2.2个人见解

该方式得注意,命名变量时,注意=左右一定不能存在空格,并且引用时使用 ”$xxx” 格式
.py文件读取传入变量是根据.sh传入的顺序来获取的,从左到右为读取顺序,并且读取是sys.argv[1]为第一个;并且这些变量都是字符串类型,若需要使用int类型,务必在调用处进行类型转换。

#####################
不积硅步,无以至千里
好记性不如烂笔头

;