shell、R和python的命令行传参汇总
2022-09-13 本文已影响0人
纷纷不可诉
Shell
shell 脚本传参默认是以数组array的形式传入,且是字符型。
设定好了的,脚本内不需要任何的语句申明,脚本后面跟了内容,就会自动默认是参数内容传入脚本。相当于shell的内置变量。
调用:
test.sh exp1 exp2 exp3
$0 脚本本身的名字 例如 test.sh
$1~n 位置参数,脚本传入的第几个参数,如果大于9,则用{},例如${10}
$* 传递的所有参数
$@ 同上$*
$# 代表传递参数的个数
R语言
1.最基础的方式,在脚本内加入args <- commandArgs(T)
,默认也是数组或说向量的形式。
# 用法(test.R里面有args <- commandArgs(T)了)
test.R exp1 exp2 exp3
#脚本内调用
arg #默认参数以向量vector的模式加入,存储在arg这个变量中
a=arg[1] # 向量的访问,第一个参数
b=arg[2] #第二个参数,以此类推
2.进阶的方式非常多,无非都是搭载包,本质其实还是利用的args <- commandArgs(T)
这个基础设定,只是多非常多的解释说明,使得程序更加用户友好和易读。对应的包有:getopt
,optparse
和argparse
等多个。
这里只介绍也最建议使用argparse
,因为它的说明和解释功能比较全面,不弱于其它包,而且可以统一python中常用的传参模块(见后)。主要分为三步:创建对象—填入参数—解析参数,然后可以调用
install.packages("argparse")
library("argparse")
# Usage
# 创建参数解析对象
parser <- ArgumentParser()
# 设置参数
# 设置第一个参数verbose,缩写为v,其作用是告诉脚本是否打印完整的计算过程,其缺省值为TRUE
parser$add_argument("-v", "--verbose", action="store_true", default=TRUE,
help="Print extra output [default]")
# 设置第二个参数quietly,缩写为q,其作用是修改verbose参数,当调用改参数时,verbose被修改为FALSE,从而导致不再打印计算过程
parser$add_argument("-q", "--quietly", action="store_false",
dest="verbose", help="Print little output")
# 设置第三个参数count,缩写为c,这是一个整数参数,缺省值5,在后续的代码中被用作确定输出随机数的个数
parser$add_argument("-c", "--count", type="integer", default=5,
help="Number of random normals to generate [default %(default)s]",
metavar="number")
#以此类推,无限累加参数设定和说明
# 调用解析器,此时args就被赋值为命令行参数输入的相应值
args <- parser$parse_args()
#调用 例如:
args$count #一般是直接用全名调用
举例:
parser = argparse::ArgumentParser(description="Script to Cluster-callpeak-motif scATAC data by ArchR")
parser$add_argument('-I','--inputpath', help='input Proj directory')
parser$add_argument('-D','--id', help='tissue ID')
parser$add_argument('-O','--out', help='out directory')
parser$add_argument('-T','--threads', help='threads')
parser$add_argument('-G','--genomesize', help='genomesize')
args = parser$parse_args()
setwd(args$out)
python
python同R一样,传参的方式和包(模块)种类非常多,大家可以自行选择,这里只介绍argparse
这个模块。同样的步骤:调用模块/包—定义参数—解析参数—调用便好。示例如下:
import argparse
def parse_args():
description='sub clustering by scanpy with the region you assign!'
parser = argparse.ArgumentParser(description=description)
parser.add_argument('-I',"--input",help='input the path of your annotated data')
#parser.add_argument('-B',"--bins",help='bins you want',default=50)
parser.add_argument('-L','--level',help='Classification mode in your data.obs, like region/celltype/leiden etc',default='leiden')
parser.add_argument('-C','--region',help='Specific region or celltype you want to sub-cluster, eg. A or B or A_B format')
parser.add_argument('-O','--output',help='output path',default=".")
return parser.parse_args()
args=parse_args()
#调用举例
data_path=args.input #都是用全名调用,不用缩写
os.chdir(data_path)