You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:51:22