Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将变量从命令行解析为url_Python_Parsing_Download_Urllib_Argparse - Fatal编程技术网

Python 将变量从命令行解析为url

Python 将变量从命令行解析为url,python,parsing,download,urllib,argparse,Python,Parsing,Download,Urllib,Argparse,我有一个名为dlimage的python脚本。我想像这样在终端中键入一个变量$python dlimage.py 1 2,并使1和2对应于下载web\u图像中的url成为http://www.example.com/1/2.jpg并下载图像。我该怎么做呢 import urllib.request import argparse def download_web_image(url): urllib.request.urlretrieve(url) parser = argparse

我有一个名为
dlimage
的python脚本。我想像这样在终端中键入一个变量
$python dlimage.py 1 2
,并使
1和2
对应于下载web\u图像中的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))

为此,我将使用以下格式:

download_web_image("http://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2 = args.num2))
以下是一个例子:

num1 = 5
num2 = 6
"http://www.example.com/{num1}/{num2}.jpg".format(num1 = num1, num2 = num2)

output:
'http://www.example.com/5/6.jpg'

格式使将定义的参数插入字符串变得容易。

为此,我将使用格式:

download_web_image("http://www.example.com/{num1}/{num2}.jpg".format(num1=args.num1, num2 = args.num2))
以下是一个例子:

num1 = 5
num2 = 6
"http://www.example.com/{num1}/{num2}.jpg".format(num1 = num1, num2 = num2)

output:
'http://www.example.com/5/6.jpg'

格式使将定义的参数插入字符串变得很容易。

假设您使用的是python3,我尝试了一些简单的方法,并尽可能接近您最初尝试的方法。希望这有帮助

import urllib.request
import sys
def download_web_image(url):
    urllib.request.urlretrieve(url)

download_web_image("http://www.example.com/{0}/{1}.jpg".format(sys.argv[1], sys.argv[2]))

假设您使用的是python3,我尝试了一些简单的方法,尽可能接近您最初尝试的方法。希望这有帮助

import urllib.request
import sys
def download_web_image(url):
    urllib.request.urlretrieve(url)

download_web_image("http://www.example.com/{0}/{1}.jpg".format(sys.argv[1], sys.argv[2]))
改变这个

parser.add_argument("num1, "num2")

改变这个

parser.add_argument("num1, "num2")


当我尝试您的部分代码时,我得到一个错误:

In [1663]: parser = argparse.ArgumentParser()
In [1664]: parser.add_argument("num1", "num2")
....
ValueError: invalid option string 'num1': must start with a character '-'
add\u参数
方法的参数错误

您应该使用的是:

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
语句中定义。阅读文档,了解您还可以向该语句添加哪些内容,例如
帮助
。您试图在一条语句中定义两个参数,但出现错误

其次,您需要使用正确的格式。我添加了
{}
{0}
{num1}
样式也可以使用)。或者使用较旧的Py2样式:

"https://www.example.com/%s/%s.jpg"%(args.num1, 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\u参数
方法的参数错误

您应该使用的是:

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
语句中定义。阅读文档,了解您还可以向该语句添加哪些内容,例如
帮助
。您试图在一条语句中定义两个参数,但出现错误

其次,您需要使用正确的格式。我添加了
{}
{0}
{num1}
样式也可以使用)。或者使用较旧的Py2样式:

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

我想您希望传递N个参数,因此要生成URL,我将执行以下操作:

import sys
args = sys.argv[1:]
baseURL = "http://www.example.com"
url = baseURL + "/" + "/".join(args)
print url
输入:

$ python dlimage.py 1 2 3.jpg
输出:

http://www.example.com/1/2/3.jpg
至于下载,您可以尝试,或者读取url上的数据,并将其作为名为最后一个参数的文件写入:

import urllib2
urlResponse = urllib2.urlopen(url)
urlData = urlResponse.read()

outFile = open(args[-1], 'w')
outFile.write(urlData)
outFile.close()

我在一个工作代理后面,下载文件时出错,可能会在今天晚些时候在家里更新我的答案。

我想你想传递N个参数,以便生成URL,我会这样做:

import sys
args = sys.argv[1:]
baseURL = "http://www.example.com"
url = baseURL + "/" + "/".join(args)
print url
输入:

$ python dlimage.py 1 2 3.jpg
输出:

http://www.example.com/1/2/3.jpg
至于下载,您可以尝试,或者读取url上的数据,并将其作为名为最后一个参数的文件写入:

import urllib2
urlResponse = urllib2.urlopen(url)
urlData = urlResponse.read()

outFile = open(args[-1], 'w')
outFile.write(urlData)
outFile.close()

我在一个工作代理后面,下载文件时出错,可能会在今天晚些时候在家里更新我的答案。

你有没有说“argh”试图记住optparse或argparse API的详细信息?@e4c5对不起,我不明白你应该告诉我们出了什么问题?错误?错误的结果<代码>仍不工作
不够;我应该投你反对票@对不起。我已经编辑了我的帖子。所以你甚至都没有看到
argparse
之类的东西。尝试导入urllib
。该模块是
urllib
<代码>请求是该模块中的函数。你有没有说过“argh”试图记住optparse或argparse API的详细信息?@e4c5对不起,我不明白你应该告诉我们什么是错的?错误?错误的结果<代码>仍不工作不够;我应该投你反对票@对不起。我已经编辑了我的帖子。所以你甚至都没有看到
argparse
之类的东西。尝试导入urllib。该模块是
urllib
<代码>请求是该模块中的函数。您好,我尝试了它,但它仍然不起作用。我已经在上面发布了我编辑的代码。格式函数附加到字符串,而不是像下面这样附加到字符串:
“http://www.example.com/{num1}/{num2}.jpg.”格式(num1=num1,num2=num2)
。它需要是
download\u web\u image(“http://www.example.com/{num1}/{num2}.jpg.format(num1=args.num1,num2=args.num2))
hello,我试过了,但仍然不起作用。我已经在上面发布了我编辑的代码。格式函数附加到字符串,而不是像下面这样附加到字符串:
“http://www.example.com/{num1}/{num2}.jpg.”格式(num1=num1,num2=num2)
。它需要是
download\u web\u image(“http://www.example.com/{num1}/{num2}.jpg.format(num1=args.num1,num2=args.num2))
两者都给出错误。定义
位置
参数时,只给出一个字符串
dest
。这两个字符串都会给出错误。定义
positional
参数时,您只给出一个字符串,即
dest
。您好,谢谢您的帮助。你知道为什么我还在上面贴错误吗?我使用的是Py3,urllib.request在标准的python 3库中,所以我不确定我错在哪里。您好,谢谢您的帮助。你知道为什么我还在上面贴错误吗?我使用的是Py3,urllib.request在标准的python3库中,所以我不确定我错在哪里。