我有一个可执行的文件。 它有一个函数,我想将其结果返回到命令行,但是,我不断收到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.argv
, argv
本身是不够的
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
。