从Python中运行命令行程序

2024-09-29 23:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python代码中运行一个blat搜索。现在写的是。。。在

os.system('blat database.fa fastafile pslfile')

当我运行代码时,我为“fastafile”和“pslfile”指定文件名。。。在

^{pr2}$

这不起作用,因为“fastafile”和“pslfile”是运行代码时创建和命名的文件的变量,但是如果要使用实际的文件名,那么每次运行代码时都必须返回并更改代码。我想使用上面的命令行参数来指定文件。在

我该如何改变这一点,以便“fastafile”和“pslfile”将被我的论点所取代(新.fasta以及测试.psl)每次?在


Tags: 文件代码命令行参数os文件名system命名
3条回答
import os

fastaFile = sys.argv[1]
pslFile = sys.argv[2]

os.system("blat -f {0} -p {1}".format(fastaFile,pslFile))

#example run: python scriptName.py fasta.txt psl.txt

您应该使用argparse接受命令行参数(它将为您提供包含文件名的名为f和p的变量),然后从那里形成命令字符串。在

command_str = "blat database.fa " + f + " " + p
os.system(command_str)

https://docs.python.org/3.4/library/argparse.html#argparse.ArgumentParser.parse_args

^{pr2}$

将参数字符串转换为对象,并将其指定为命名空间的属性。返回填充的命名空间。在

以前对add_argument()的调用准确地确定创建了哪些对象以及如何分配这些对象。有关详细信息,请参阅add_argument()的文档。在

默认情况下,字符串取自参数系统argv,并为属性创建一个新的空命名空间对象。在

#!/usr/bin/env python2.7

from sys import argv

def main():
    if len(argv) != 3:
        print "usage: ./my_code.py -f *.fasta -p *.psl"
        raise SystemExit
    os.system('blat database.fa {} {}'.format(*argv[1:]))

if __name__ == '__main__':
    main()

相关问题 更多 >

    热门问题