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.argvargvは不十分です

于 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

しかし、表示されるエラーメッセージはそれとは何の関係もありません。これは2つの原因が原因です。1つは、agrvの代わりに配置したことですargv。次に、をインポートしたので、だけでなくsys参照する必要があります。sys.argvargv

于 2012-08-12T21:01:16.160 に答える