2012-08-12 58 views
2

我有一个可执行文件。它有一个函数,我想将其结果返回给命令行,但是,我一直收到NameError消息。为了打破下来,我使用LinuxMint Lisa和到目前为止我有:使用Python的sys.argv将函数结果返回给命令行?

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

然后我从终端文件模式:

sudo chmod +x this_file.py 

当我打电话从命令行这个文件,我“马上进入:

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

将返回:

TypeError: Must assign a string 

所以我知道我很明显没有正确地使用sys.argv,但是,当尝试将此函数结果返回到命令行时,我有一种感觉,就像我在尝试其他东西。

+2

in'print dictionary(agrv)'argv拼写错误。此外,使用'sys.argv' – Levon 2012-08-12 20:57:32

+2

最好提供完整的回溯以给出错误消息的一些上下文 - 尤其是关于发生错误的行号的信息。 – Levon 2012-08-12 21:26:24

+0

此外,你可能会考虑发布一个不同的问题,而不是“发展”这一个。只是一个想法。 – Levon 2012-08-12 21:29:01

回答

3

好吧,我还不如张贴这是我的答案,而不是只是一条评论:

print dictionary(agrv) 

argv拼写错误。

应该

print dictionary(sys.argv) 

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

+0

当我使用'sys.arvg'时,出现语法错误。所以'def dictionary(sys.argv):'不正确? – tijko 2012-08-12 21:08:15

+0

@tijko'sys.arv'不正确,它是'sys.argv'(注意“g”)。你调用你的参数你的函数头(带有'def'的行)完全取决于你,但是在调用中你确实需要正确的名字。 – Levon 2012-08-12 21:11:33

+0

是的,我需要在这里拼写更仔细。我在文件中有'sys.argv'。 – tijko 2012-08-12 21:13:49

2

的argv是sys模块的属性

二者必选其一

sys.argv

或做

from sys import argv

+0

我想到,但由于某种原因,我记得看到argv本身被使用了吗? – tijko 2012-08-12 21:10:15

+0

如果你编写'import sys',你必须使用'sys.argv',否则如果从'sys import argv'写入''你必须使用'argv'。两者都是正确的。 – 2012-08-12 21:13:37

-1

你不会让你的“返回”结果到命令行意味着它不清楚是什么。如果你只是想打印结果,你可以做print

但您收到的错误消息与此无关。这是由两件事引起的:一,你把agrv而不是argv。第二,你已经输入sys,所以你需要参考sys.argv不只是argv

+1

看起来像你迫切需要做一个基本的Python教程。你的字典函数可以调用它的任何喜欢的参数。但是你必须用'dictionary(sys.argv)'调用它(代码中的最后一行)'。 – 2012-08-12 21:11:23

+1

这与argv没有任何关系。你对我的评论和其他答案表明你并不真正了解Python名字的工作原理。这将通过一个基本的教程来纠正。 – 2012-08-12 21:23:40

1

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

1

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

print dictionary(sys.argv[1]) 

次或多次调用字典功能:

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

请注意,我们不希望包括节目名称本身,以便省去SYS .argv [0]。

+0

啊,这很有道理。我没有使用sys.argv,它显示。我认为** kwargs使用列表,元组等。 – tijko 2012-08-12 21:48:38