js css html

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,optparseargparse等多个。
这里只介绍也最建议使用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)
上一篇下一篇

猜你喜欢

热点阅读