检查CMD中的参数是否已编写或未使用Python

检查CMD中的参数是否已编写或未使用Python,python,Python,我是python新手,我正在尝试构建一个脚本,该脚本获取一个URL作为参数,并向网站发送一个GET请求,然后打印响应和HTML正文中的详细信息 我写的代码是: import sys import urllib.request url = 'https://%s' % (sys.argv[1]) res = urllib.request.urlopen(url) print('Response from the server:'+'\n', res.info()) print('HTML web

我是python新手,我正在尝试构建一个脚本,该脚本获取一个URL作为参数,并向网站发送一个GET请求,然后打印响应和HTML正文中的详细信息

我写的代码是:

import sys
import urllib.request

url = 'https://%s' % (sys.argv[1])
res = urllib.request.urlopen(url)
print('Response from the server:'+'\n', res.info())
print('HTML web page:'+'\n', res.read())
现在,我想检查一个参数是否通过CMD传递,如果没有,则发出警告。 以及打印状态代码和原因。 理性到底意味着什么? 这就是我到目前为止得到的,我不明白为什么我没有得到任何结果

我目前的代码是:

import sys
import urllib.request, urllib.error

try:
    url = 'https://%s' % (sys.argv[1])
    res = urllib.request.urlopen(url)
except IndexError:
    if len(sys.argv) < 1:
        print(res.getcode())
        print(res.getreason())
    elif len(sys.argv) > 1:
        print('Response from the server:'+'\n', res.info())
        print('HTML web page:'+'\n', res.read())
        print('Status Code:', res.getcode())
导入系统 导入urllib.request,urllib.error 尝试: url='https://%s'(sys.argv[1]) res=urllib.request.urlopen(url) 除索引器外: 如果len(sys.argv)<1: 打印(res.getcode()) 打印(res.getreason()) elif len(系统参数)>1: 打印('来自服务器的响应:'+'\n',res.info()) 打印('HTML网页:'+'\n',res.read()) 打印('状态代码:',res.getcode())
谢谢。

只有在命令行中不提供任何参数时,才会执行
except
块。基本上只有在引发索引器异常时才会执行。我相信在这种情况下,仅打印错误消息就足够了。打印语句应在
try
块内处理

import sys
import urllib
from urllib2 import URLError

try:
    url = 'https://%s' % (sys.argv[1])
    #url = r'https://www.google.com'
    res = urllib.urlopen(url)
    print('Response from the server:' + '\n', res.info())
    print('HTML web page:' + '\n', res.read())
    print('Status Code:', res.getcode())
except IndexError as e:
    print e.message
except URLError as e1:
    print e1.reason

注意:我使用的是python 2.7。因此,我没有使用urllib.request.urlopen(),因为在Python2.x中这是不必要的,因为您只检查
len(sys.argv)<1或len(sys.argv)>1
,而从不检查
len(sys.argv)==1
,因为
sys.argv[0]
是脚本的名称

此外,如果使用除IndexError之外的
,则实际上是在处理(或应该处理)异常,因此python在退出时不会出现错误,不会在
if elif
子句中出现任何大小写

你可以这样做:

import sys
import urllib

try:
    url = 'https://%s' % (sys.argv[1])
    res = urllib.request.urlopen(url)

except IndexError:
    if len(sys.argv) <= 1:
        print("Too few arguments")
        raise # <- or replace with sys.exit(1) if you don't want to propagate the exception
导入系统 导入URL库 尝试: url='https://%s'(sys.argv[1]) res=urllib.request.urlopen(url) 除索引器外:
如果len(sys.argv)您正在except块中打印响应。将else语句中的print语句移动到try块中。我尝试对url进行硬编码并进行了测试。作品fine@DineshKumar,你能帮我附上密码吗?我不明白。我如何打印原因?你是指索引错误的原因吗?谢谢。我添加了它。