3

我有一个可执行文件。它有一个函数,我想将其结果返回到命令行,但是我不断收到 NameError 消息。为了分解,我正在使用 LinuxMint Lisa,到目前为止我有:

#! /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)

然后我从我的终端 chmod:

sudo chmod +x this_file.py

当我从命令行调用此文件时,我将输入:

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

哪个会返回:

TypeError: Must assign a string

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

4

5 回答 5

3

好的,我不妨将其发布为我的答案,而不仅仅是评论:

print dictionary(agrv)

argv拼写错误。

它应该是

print dictionary(sys.argv)

此外,使用sys.argv,argv本身是不够的

于 2012-08-12T21:00:43.673 回答
2

argv 是sys模块的一个属性

使用任一

sys.argv

或者做

from sys import argv

于 2012-08-12T21:00:09.757 回答
1

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

于 2012-08-12T21:38:02.720 回答
1

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

print dictionary(sys.argv[1])

或者多次调用字典函数:

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

请注意,我们不想包含程序名称本身,因此省略 sys.argv[0]。

于 2012-08-12T21:40:54.593 回答
-1

您没有明确将结果“返回”到命令行是什么意思。如果您只想打印结果,您可以执行print.

但是您收到的错误消息与此无关。这是由两件事引起的:一,你放了agrv而不是argv. 其次,您已经导入sys了 ,因此您需要引用的sys.argv不仅仅是argv.

于 2012-08-12T21:01:16.160 回答