从命令行运行python程序并指定参数

从命令行运行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

我有一个文档定义了几个函数(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
```
我知道如何通过进入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)