从命令行运行python程序并指定参数
我有一个文档定义了几个函数(assignment_2a.py)。我正在努力实现以下目标:从命令行运行python程序并指定参数,python,Python,我有一个文档定义了几个函数(assignment_2a.py)。我正在努力实现以下目标: Modify the [assignment_2a.py](../code/assignment_2a.py) to be able to run the program `make_random_story` from the command line: ``` $ python assignment_2a.py '../data/alice.txt' 2 200 ``` 我知道如何通过进入ipyth
Modify the [assignment_2a.py](../code/assignment_2a.py) to be able to run
the program `make_random_story` from the command line:
```
$ python assignment_2a.py '../data/alice.txt' 2 200
```
我知道如何通过进入ipython来运行这个指定的函数,它工作得很好。但是如何修改文档,以便使用上述命令从命令行运行它,即以该格式指定输入变量
更新:我按照注释中的建议更新了函数,并收到以下错误消息:
COMMAND LINE INPUT:
python assignment_2a.py '../data/alice.txt' 2 200
COMMAND LINE OUTPUT:
Traceback (most recent call last):
File "assignment_2a.py", line 202, in <module>
make_random_story(*sys.argv[1:])
File "assignment_2a.py", line 189, in make_random_story
for i in xrange(0,num_words):
TypeError: an integer is required
使用
sys.argv
非常简单。不要指定sys.argv[0]
它是脚本的名称
make_random_story(sys.argv[1])
更好的建议包括使用本机模块
你的情况很简单。下面是如何使用
n_gram
和num_words
是可选的,但它们仍然必须按顺序指定为位置参数:
if __name__ == '__main__':
make_random_story(*sys.argv[1:])
因此,以下所有内容都是相同的:
python assignment_2a.py '../data/alice.txt'
python assignment_2a.py '../data/alice.txt' 2
python assignment_2a.py '../data/alice.txt' 2 200
并且参数的数量或多或少会导致错误。正如其他人(和您自己)所指出的,您需要使用sys.argv
下面是您的main()
函数的外观:
if __name__ == '__main__':
f = sys.argv[1]
n_gram = sys.argv[2]
num_words = sys.argv[3]
make_random_story(f, n_gram=n_gram, num_words=num_words)
这迫使您在每次调用make\u random\u story
时键入所有3个参数。这是更明确的一点,允许您在需要时附加参数的健全性检查。我还认为它读起来容易一点,但打电话也更麻烦
更多灵活性请参见@Alex Hall的答案。请做一个简单的回答。试着把
sys.argv
打印成一个列表。。。你注意到什么?考虑接受这个问题的答案:谢谢你的回应!我做了您所写的更改,但现在当我尝试从命令行运行时,出现以下错误:回溯(最近一次调用):make_random_story(*sys.argv[1:])文件make_random_story(*sys.argv[1:])第201行中的文件“assignment_2a.py”,第189行,make_range中的I(0,num_words):TypeError:需要一个整数
python assignment_2a.py '../data/alice.txt'
python assignment_2a.py '../data/alice.txt' 2
python assignment_2a.py '../data/alice.txt' 2 200
if __name__ == '__main__':
f = sys.argv[1]
n_gram = sys.argv[2]
num_words = sys.argv[3]
make_random_story(f, n_gram=n_gram, num_words=num_words)