使用Python的sys.argv将函数结果返回给命令行?

我有一个可执行的文件。 它有一个函数,我想将其结果返回到命令行,但是,我不断收到NameError消息。 打破事情,我正在使用LinuxMint丽莎,到目前为止,我有:

#! /usr/bin/env python import mechanize from BeautifulSoup import BeautifulSoup import sys def dictionary(word): br = mechanize.Browser() response = br.open('http://www.dictionary.reference.com') br.select_form(nr=0) br.form['q'] = word br.submit() definition = BeautifulSoup(br.response().read()) trans = definition.findAll('td',{'class':'td3n2'}) fin = [i.text for i in trans] query = {} for i in fin: query[fin.index(i)] = i return query print dictionary(sys.argv) 

然后,我从我的terminalchmod:

 sudo chmod +x this_file.py 

当我从命令行调用这个文件时,我会input:

 ./this_file.py 'pass'(or any other string argument) 

哪个会返回:

 TypeError: Must assign a string 

所以我知道我显然没有正确地使用sys.argv,但是当尝试将这个函数的结果返回到命令行时,我感觉我正在尝试其他的东西。

好吧,我不妨把这个帖子当作我的回答,而不仅仅是一个评论:

 print dictionary(agrv) 

argv拼写错误。

它应该是

 print dictionary(sys.argv) 

另外,使用sys.argvargv本身是不够的

argv是sys模块的一个属性

使用任一

sys.argv

或做

from sys import argv

不应该是print dictionary(sys.argv[1]) 。 我想你想在dictionary.com中搜索命令行参数

问题与目前发布的问题是,sys.argv是一个列表,而不是一个字符串,所以当你设置表单条目“q”你将其设置为该程序的参数列表。 你可以改变程序传入第一个参数:

 print dictionary(sys.argv[1]) 

或多次调用字典功能:

 for i in sys.argv[1:]: print dictionary(i) 

请注意,我们不希望包含程序名称本身,所以省略sys.argv [0]。

你没有把“结果”返回给命令行的方法说清楚你的意思。 如果你只是想打印结果,你可以print

但是你得到的错误信息与此无关。 这是由两件事引起的:一,你把agrv代替argv 。 其次,你已经导入了sys ,所以你需要引用sys.argv而不仅仅是argv