我正在使用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)
答案 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