[英]IndexError: list index out of range: sys.argv[1] out of range
[英]sys.argv[1] IndexError: list index out of range
我正在編寫一個 Python HTTP 客戶端。 當我有下面的代碼時,我從終端收到一條錯誤消息“列表索引超出范圍”。
from socket import *
import sys
server_host = sys.argv[1]
server_port = sys.argv[2]
filename = sys.argv[3]
host_port = "%s:%s" %(server_host, server_port)
try:
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((server_host,int(server_port)))
header = {
"first_header" : "GET /%s HTTP/1.1" %(filename),
"Host": host_port,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US",
}
httpHeader = "\r\n".join("%s:%s" %(item,header[item]) for item in header)
print httpHeader
clientSocket.send("%s\r\n\r\n" %(httpHeader))
except IOError:
sys.exit(1)
final = ""
responseMessage = clientSocket.recv(1024)
while responseMessage:
final += responseMessage
responseMssage = clientSocket.recv(1024)
clientSocket.close()
print "final:",final
我通過鍵入從命令行運行程序
python ./client.py http://127.0.0.1 7000 HelloWorld.html
有人可以告訴我我的代碼有什么問題嗎? 提前致謝。
為什么不使用argparse
而不是手動處理 sys.argv? 例如:
import argparse as ap
def argParse():
parser=ap.ArgumentParser(description='Script to do something')
parser.add_argument("host", help="web address")
parser.add_argument("port", help="port to connect on")
parser.add_argument("filename",help="page to use")
return parser.parse_args()
然后在主函數調用中:
args=argParse()
然后,您可以在代碼中使用args.host
、 args.port
和args.filename
, argparse 將處理缺少的參數及其類型等。您可以通過在add_argument()
調用中的定義前面添加--
來使用可選參數。
您使用 argparse 的代碼:
from socket import *
import argparse as ap
def argParse():
parser=ap.ArgumentParser(description='Script to do something')
parser.add_argument("host", help="web address")
parser.add_argument("port", type=int, help="port to connect on")
parser.add_argument("filename",help="page to use")
return parser.parse_args()
args=argParse()
host_port = "%s:%d" % (args.host, args.port)
try:
clientSocket = socket(AF_INET,SOCK_STREAM)
clientSocket.connect((args.host,args.port))
header = {
"first_header" : "GET /%s HTTP/1.1" % (args.filename),
"Host": str(args.port),
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US",
}
httpHeader = "\r\n".join("%s:%s" %(item,header[item]) for item in header)
print httpHeader
clientSocket.send("%s\r\n\r\n" %(httpHeader))
except IOError:
sys.exit(1)
final = ""
responseMessage = clientSocket.recv(1024)
while responseMessage:
final += responseMessage
responseMssage = clientSocket.recv(1024)
clientSocket.close()
print "final:",final
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.