Python 从 shell 获取多个参数的脚本

Python script to take multiple number of arguments from shell

我正在尝试将多个文件作为来自终端的输入。输入数字可能从至少 1 到许多不等。这是我程序的输入

F3.py -e <Energy cutoff> -i <inputfiles>

我希望参数 -i 取从 1 到 multiple.e 的任意数量的值。g.

F3.py -e <Energy cutoff> -i file1 file2
F3.py -e <Energy cutoff> -i *.pdb

现在它只需要第一个文件然后就停止了。 这是我目前所拥有的:

def main(argv):
try:
    opts,args=getopt.getopt(argv,"he:i:")
    for opt,arg in opts:
        if opt=="-h":
            print 'F3.py -e <Energy cutoff> -i <inputfiles>'
            sys.exit()
        elif opt == "-e":
            E_Cut=float(arg)
            print 'minimum energy=',E_Cut
        elif opt == "-i":
            files.append(arg)
            print files
    funtction(files)
except getopt.GetoptError:
    print 'F3.py -e <Energy cutoff> -i <inputfiles>'
    sys.exit(2)

如有任何帮助,我们将不胜感激。谢谢

尝试使用@larsks 的建议,下一个片段应该适用于您的用例:

import argparse 

parser = argparse.ArgumentParser()

parser.add_argument('-i', '--input', help='Input values', nargs='+', required=True)

args = parser.parse_args()

print args

kwargs 解释:

  • nargs 允许您将值解析为列表,因此您可以使用以下内容进行迭代:for i in args.input.
  • required 使此参数成为强制性参数,因此您必须至少添加一个元素

通过使用 argparse 模块,您还可以使用 -h 选项来描述您的参数。所以尝试使用:

$ python P3.py -h
usage: a.py [-h] -i INPUT [INPUT ...]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT [INPUT ...], --input INPUT [INPUT ...]
                        Input values


$ python P3.py -i file1 file2 filen
Namespace(input=['file1', 'file2', 'filen'])

如果您坚持使用 getopt,您将不得不像 , 那样将 space 以外的多个参数与定界符结合起来,然后像这样相应地修改您的代码

import getopt
import sys

try:
    opts,args=getopt.getopt(sys.argv[1:],"he:i:")
    for opt,arg in opts:
        if opt=="-h":
            print 'F3.py -e <Energy cutoff> -i <inputfiles>'
            sys.exit()
        elif opt == "-e":
            E_Cut=float(arg)
            print 'minimum energy=',E_Cut
        elif opt == "-i":
            files = arg.split(",")
            print files
    #funtction(files)
except getopt.GetoptError:
    print 'F3.py -e <Energy cutoff> -i <inputfiles>'
    sys.exit(2)

当你运行这个你会得到输出

>main.py -e 20 -i file1,file2
minimum energy= 20.0
['file1', 'file2']

注意 我已经评论了你的函数调用并从 main 函数中删除了 unwrap 你的代码,你可以在你的代码中重做这些事情它不会改变你的结果。