我的python脚本中的IndexError

时间:2013-10-14 17:00:37

标签: python sockets networking

我正在使用ActivePython 2.7.5.6(ActiveState Software Inc.)。我收到错误消息:

Traceback (most recent call last):
  File "C:\Python27\python scriptname.py", line 9, in 
    host = sys.argv[1]
IndexError: list index out of range

当我将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)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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