-1

ActivePython 2.7.5.6 (ActiveState Software Inc.) を使用しています。エラーメッセージが表示されます:

トレースバック (最新の呼び出しが最後):
  ファイル「C:\Python27\python scriptname.py」の 9 行目
    ホスト = sys.argv[1]
IndexError: リスト インデックスが範囲外です

sys.argv[1]を使用するように変更する[0]と、同じエラーが発生しますが、代わりargv[1]argv[2]. ここで何が問題なのですか?

#!/usr/bin/env python
# Simple Gohpher Client - chapter 1 - gopherclient.py

import socket, sys


port = 70

host = sys.argv[1]
filename = sys.argv[1]

s = socket. socket(socket.AF_INET, socket. SOCK_STREAM)
s.connect((host, port))

s.sendall(filename + "\r\n")

while 1:
    buf = s.recv(2048)
    if not len(buf):
        break
    sys.stdout.write(buf)
4

2 に答える 2

1

コマンドラインで人々が何を渡すことを期待しているのか正確にはわかりませんが、これは次のとおりです。

host = sys.argv[1]
filename = sys.argv[1]

おそらくこれであるはずです:

if len(sys.argv) < 3:
    sys.stderr.write("Not enough arguments.\n")
    sys.stderr.write("Usage {0} <host> <filename>\n".format(sys.argv[0]))
    sys.exit(1)

host = sys.argv[1]
filename = sys.argv[2]

ファイル名をデフォルトのホスト名にする場合は、これを次のように変更します。

if len(sys.argv) < 2:
    sys.stderr.write("Not enough arguments.\n")
    sys.stderr.write("Usage {0} <host> [<filename>]\n".format(sys.argv[0]))
    sys.exit(1)

host = sys.argv[1]
if len(sys.argv} == 3:
    filename = sys.argv[2]
else:
    filename = host
于 2013-10-14T17:12:00.750 に答える
1

コマンドラインで十分な引数を渡していません。もっと渡す。

于 2013-10-14T17:08:29.987 に答える