Skip to main content
 首页 » 编程设计

python之将变量从命令行解析为 url

2025年05月04日16birdshome

我有一个名为 dlimage 的 python 脚本。我想在终端中输入这样的变量 $ python dlimage.py 1 2 并让 1 和 2 对应于 download_web_image 中的 url 成为 http://www.example.com/1/2.jpg 并下载图片。我该怎么做?

import urllib.request 
import argparse 
 
def download_web_image(url): 
    urllib.request.urlretrieve(url) 
 
parser = argparse.ArgumentParser() 
parser.add_argument("num1", "num2") 
args = parser.parse_args() 
 
download_web_image("http://www.example.com/"num1"/"num2".jpg") 

编辑 2: 我终于让它工作了。感谢大家的帮助! 有效的代码:

import urllib 
import argparse 
 
def download_web_image(url): 
    IMAGE = url.rsplit('/',1)[1] 
    urllib.urlretrieve(url, IMAGE) 
 
parser = argparse.ArgumentParser() 
parser.add_argument("num1") 
parser.add_argument("num2") 
args = parser.parse_args() 
 
download_web_image("https://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2=args.num2)) 

请您参考如下方法:

当我尝试您的部分代码时,出现错误:

In [1663]: parser = argparse.ArgumentParser() 
In [1664]: parser.add_argument("num1", "num2") 
.... 
ValueError: invalid option string 'num1': must start with a character '-' 

add_argument 方法的参数是错误的。

你应该使用的是:

parser = argparse.ArgumentParser() 
parser.add_argument("num1") 
parser.add_argument("num2") 

在这种情况下,帮助 将如下所示:

In [1668]: parser.print_help() 
usage: ipython3 [-h] num1 num2 
 
positional arguments: 
  num1 
  num2 
 
optional arguments: 
  -h, --help  show this help message and exit 

并测试等效于 myprog 1 2

的输入
In [1669]: args = parser.parse_args(['1','2']) 
In [1670]: args 
Out[1670]: Namespace(num1='1', num2='2') 
In [1671]: args.num1 
Out[1671]: '1' 
In [1672]: args.num2 
Out[1672]: '2' 

现在我可以格式化一个 URL:

In [1675]: "https://www.example.com/{}/{}.jpg".format(args.num1, args.num2) 
Out[1675]: 'https://www.example.com/1/2.jpg' 

所以你的代码有两个问题:

每个参数,num1 和 num2 都必须在单独的 add_argument 语句中定义。阅读文档以查看您还可以向该语句添加什么,例如 help。您试图在一个语句中定义 2 个参数,但出现错误。

其次,您需要使用正确的格式。我添加了 {}({0} 和 {num1} 样式也有效)。或者在旧的 Py2 风格中:

"https://www.example.com/%s/%s.jpg"%(args.num1, args.num2)