2012-08-12 110 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