Python3如何将URL作为命令行参数传入脚本而非input交互获取
实现命令行直接传入URL参数的修改方法
之前自定义带url形参的main(url)没有生效,核心原因是脚本入口块调用main()时,没有把命令行读取到的参数传递进去。
用Python内置的sys模块就能直接读取命令行传入的参数,不需要额外安装第三方库,也不需要保留input()交互逻辑,修改步骤如下:
- 在脚本开头导入
sys模块 - 替换原代码中
input()获取URL的逻辑,从命令行参数列表中取URL值 - 增加简单的参数校验,用户漏传URL时给出提示
- 调用
main()函数时把拿到的URL作为参数传入即可
说明:命令行参数天然支持带引号/不带引号的传参形式:不带引号时参数按空格分割,带引号时引号内的内容会被识别为单个参数,完全匹配你的使用需求。
修改后完整代码
import re import urllib import sys def main(url): import core.downloader as downloader import core.pdf as pdf print("Starting...\n") # 校验传入的URL是否指向文档首页,而非具体页码 url_end = re.search(r'(.+)/\d+/?$', url) if url_end: print('The URL provided points to a specific page in the document.') url_without_page_number = url_end.group(1) print('Using the following URL instead:') print(url_without_page_number) url = url_without_page_number url_open1 = str(urllib.request.urlopen(url).read().decode("utf-8")) re1 = '.*?' re2 = '((?:http|https)(?::\\/{2}[\\w]+)(?:[\\/|\\.]?)(?:[^\\s"]*)(?:png|jpg))' rg = re.compile(re1+re2, re.IGNORECASE | re.DOTALL) m = rg.search(url_open1) if m: httpurl = m.group(1) print('Starting from URI: ' + httpurl) filelist = downloader.downloader(httpurl) pdf.creator(filelist) else: print("Error! No image was found") if __name__ == '__main__': # sys.argv[0]是脚本本身的文件名,用户传入的第一个参数从索引1开始 if len(sys.argv) < 2: print("使用方法: python test.py <目标PDF的URL>") sys.exit(1) input_url = sys.argv[1] main(input_url)
使用方式
修改完成后,直接在命令行执行对应命令即可运行,不需要进入交互输入环节:
- 无特殊字符的URL可直接传入:
python test.py https://google.com - 带特殊字符、查询参数的URL建议用引号包裹:
python test.py "https://issuu.com/xxx/docs/xxx?param=123"
内容的提问来源于stack exchange,提问作者Estatistics
相关产品推荐
相关产品推荐

