Using sys.argv for input through Terminal
我编写了一个python脚本,现在我正试图通过命令行运行它。它由一个函数组成,该函数接受一个必需参数和几个可选参数。
def main(input_folder, iterations = 1000, probability_cutoff = - 40 , threshold = 10): ...
现在我正试图通过命令行使其可执行,如下所示:
if __name__ =="__main__":
main(sys.argv[1])
只要我只输入一个参数,这就可以很好地工作;但是我不知道如何接受sys.argv作为列表提供的附加的可选输入。
- 有没有一种简单的方法可以用这种方法做到这一点?
- 或者是否需要使用其他模块,如阿格帕斯?
- 我也尝试将关键字参数输入函数,但是这也不能奏效-这是可行的方法吗?
我正在Mac上使用python 2.7。非常感谢您的帮助!
- 我要说的是,这是如何从列表中提取参数并将其传递给函数调用的副本,因为这是您所要求的机制(以及[1:]跳过argv的第一项)。
- 这可能是真的,但我没有找到那个,因为我没有使用正确的搜索词。我应该删除这个吗?
- 一点也不,任何其他试图解包sys.argv的人(像你一样),但没有使用正确的搜索词来查找相关问题(像你一样),都会找到这个问题,这将帮助他们。
- 不过,我想指出的是,sys.argv的所有元素都是字符串,因此,当您执行main(*sys.argv[1:])时,就像接受的答案一样,您需要自己分析数字。
- 是的,我只是在每次使用时都添加了int()。这就是你的意思吗?
- 是的,只是提醒您,因为您的默认值已经是整数,所以任何转换都是多余的(不是问题,但您可能会忘记为什么需要转换)
- 类型转换是我喜欢argparse的另一个原因,@tadhgmcdonald jensen。我已将其添加到答案中。
我总是使用argparse,因为它提供了很好的错误处理,将字符串转换为int或打开的文件,并清晰地记录了选项。但是,这应该满足您的需要:
1 2
| if __name__ =="__main__":
main(*sys.argv[1:]) |