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 你的代码,你可以在你的代码中重做这些事情它不会改变你的结果。
我正在尝试将多个文件作为来自终端的输入。输入数字可能从至少 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 你的代码,你可以在你的代码中重做这些事情它不会改变你的结果。