环境: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类型,务必在调用处进行类型转换。
#####################
不积硅步,无以至千里
好记性不如烂笔头