-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

您没有在命令行上传递足够的参数。通过更多。

于 2013-10-14T17:08:29.987 回答
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 回答