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

时间:2012-08-12 20:54:36

标签: python linux arguments command-line-arguments

我有一个我已经可执行的文件。它有一个函数,我想将其结果返回到命令行,但是,我一直收到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但是,当我尝试将这些函数结果返回到命令行时,我感觉我正在捣乱其他东西。

5 个答案:

答案 0 :(得分:3)

好的,我不妨发布这个作为我的答案,而不仅仅是评论:

print dictionary(agrv)

argv拼写错误。

应该是

print dictionary(sys.argv)

另外,使用sys.argvargv本身就不够了

答案 1 :(得分:2)

argv是sys模块的属性

使用

sys.argv

或做

from sys import argv

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

print dictionary(sys.argv[1])

或者多次调用字典函数:

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

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

答案 4 :(得分:-1)

您没有说明将“返回”结果发送到命令行的含义。如果您只想打印结果,可以执行print

但是你得到的错误信息与此无关。这是由两件事造成的:一,你放agrv而不是argv。其次,您已导入sys,因此您需要引用sys.argv而不只是argv