目前这是我的python脚本( TagGen ),它有一个功能:
def SJtag(file,len_tag):
import csv
reader = csv.reader(open(file), dialect='excel-tab' )
for row in reader:
qstarts = row[1].split(",")[1:-1]
n = len_tag/2
for i in qstarts:
name = row[0]
start = int(i)-n
if start<0:
start = 0
end = int(i)+n
if end>len(row[2]):
end=len(row[2])
tag = row[2][start:end]
print name, i, tag, len(tag)
SJtag("QstartRefseqhg19.head",80)
我想使用bash命令行提供 SJtag 函数的文件和 len_tag 参数,如下所示:
python ./TagGen QstartRefseqhg19.head 80
我该怎么做,或者类似的东西?
感谢您的帮助!
答案 0 :(得分:3)
您可以使用argparse module。
来自文档,
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
如果您使用的是早于2.7的python版本,则应使用optparse模块,以达到类似的效果。
答案 1 :(得分:2)
sys.argv
是参数列表,第一个元素是脚本名称。这是一个字符串列表,因此,如果任何参数是数字,则必须使用int()
或float()
进行转换。
所以,如果你这样调用一个脚本:
$ python myscript.py 1 foo bar baz
sys.argv
就是这样:
["myscript.py", "1", "foo", "bar", "baz"]
在您的情况下,您可以将脚本设为:
import sys
import csv
def SJtag(file,len_tag):
reader = csv.reader(open(file), dialect='excel-tab' )
for row in reader:
qstarts = row[1].split(",")[1:-1]
n = len_tag/2
for i in qstarts:
name = row[0]
start = int(i)-n
if start<0:
start = 0
end = int(i)+n
if end>len(row[2]):
end=len(row[2])
tag = row[2][start:end]
print name, i, tag, len(tag)
if __name__ == '__main__':
SJtag(sys.argv[1], int(sys.argv[2]))
答案 2 :(得分:1)
我建议使用argparse
和一个名为plac
的好包装器。在你的情况下,你需要做的就是:
if __name__ == '__main__':
import plac; plac.call(SJtag)
...而plac
将处理所有事情,因为它能够从函数的签名中找出要使用的命令行参数。非常酷,查看文档了解更多(它可以做更多)。
答案 3 :(得分:0)