带引号的字符串作为Python脚本的可选参数

带引号的字符串作为Python脚本的可选参数,python,command-line-arguments,argument-passing,Python,Command Line Arguments,Argument Passing,我有一个简单的实用程序脚本,用于下载给定URL的文件。它基本上只是Linux二进制文件“aria2c”的包装器 下面是名为getFile的脚本: #!/usr/bin/python # # SCRIPT NAME: getFile # PURPOSE: Download a file using up to 20 concurrent connections. # import os import sys import re import subprocess try: file

我有一个简单的实用程序脚本,用于下载给定URL的文件。它基本上只是Linux二进制文件“aria2c”的包装器

下面是名为
getFile
的脚本:

#!/usr/bin/python

#
# SCRIPT NAME: getFile
# PURPOSE: Download a file using up to 20 concurrent connections.
#

import os
import sys 
import re
import subprocess

try:
    fileToGet = sys.argv[1]

    if os.path.exists(fileToGet) and not os.path.exists(fileToGet+'.aria2'):
        print 'Skipping already-retrieved file: ' + fileToGet
    else:
        print 'Downloading file: ' + fileToGet
        subprocess.Popen(["aria2c-1.8.0", "-s", "20", str(fileToGet), "--check-certificate=false"]).wait() # SSL

except IndexError:
    print 'You must enter a URI.'
例如,此命令将下载一个文件:

$ getFile http://upload.wikimedia.org/wikipedia/commons/8/8e/Self-portrait_with_Felt_Hat_by_Vincent_van_Gogh.jpg
我想做的是允许一个可选的第二个参数(在URI之后),它是一个带引号的字符串。此字符串将是下载文件的新文件名。因此,下载完成后,根据第二个参数重命名文件。使用上述示例,我希望能够输入:

$ getFile http://upload.wikimedia.org/wikipedia/commons/8/8e/Self-portrait_with_Felt_Hat_by_Vincent_van_Gogh.jpg "van-Gogh-painting.jpg"

但我不知道如何将带引号的字符串作为可选参数。我该怎么做呢?

只要测试一下sys.argv的长度就可以了;如果大于2,则有一个额外的参数:

if len(sys.argv) > 2:
    filename = sys.argv[2]

只需测试sys.argv的长度即可;如果大于2,则有一个额外的参数:

if len(sys.argv) > 2:
    filename = sys.argv[2]

只需测试sys.argv的长度即可;如果大于2,则有一个额外的参数:

if len(sys.argv) > 2:
    filename = sys.argv[2]

只需测试sys.argv的长度即可;如果大于2,则有一个额外的参数:

if len(sys.argv) > 2:
    filename = sys.argv[2]

如果在它们之间提供空格,shell将把它作为第二个参数传递(通常)

例如,下面是
test.py

import sys

for i in sys.argv:
    print(i)
结果如下:

$ python test.py url "folder_name"
test.py
url
folder_name
引号一点也不重要,因为它是在shell中处理的,而不是python。要获得它,只需使用
sys.argv[2]


希望这有帮助

如果在它们之间提供空格,shell将作为第二个参数传递(通常)

例如,下面是
test.py

import sys

for i in sys.argv:
    print(i)
结果如下:

$ python test.py url "folder_name"
test.py
url
folder_name
引号一点也不重要,因为它是在shell中处理的,而不是python。要获得它,只需使用
sys.argv[2]


希望这有帮助

如果在它们之间提供空格,shell将作为第二个参数传递(通常)

例如,下面是
test.py

import sys

for i in sys.argv:
    print(i)
结果如下:

$ python test.py url "folder_name"
test.py
url
folder_name
引号一点也不重要,因为它是在shell中处理的,而不是python。要获得它,只需使用
sys.argv[2]


希望这有帮助

如果在它们之间提供空格,shell将作为第二个参数传递(通常)

例如,下面是
test.py

import sys

for i in sys.argv:
    print(i)
结果如下:

$ python test.py url "folder_name"
test.py
url
folder_name
引号一点也不重要,因为它是在shell中处理的,而不是python。要获得它,只需使用
sys.argv[2]


希望这有帮助

哦,如果您将一个带引号的字符串传递给Python,它将自动将其视为一个参数?完全正确;引用是一个shell特性,与Python无关,真的。啊,好的,谢谢。我想我没有对这个问题进行尽职调查。我至少应该试一下,看看这些论点是如何起作用的,而不是假设它不会像你所描述的那样起作用所以,请原谅我的懒惰——非常感谢!或者使用
argparse
…)哦,如果您将一个带引号的字符串传递给Python,它将自动将其视为一个参数?完全正确;引用是一个shell特性,与Python无关,真的。啊,好的,谢谢。我想我没有对这个问题进行尽职调查。我至少应该试一下,看看这些论点是如何起作用的,而不是假设它不会像你所描述的那样起作用所以,请原谅我的懒惰——非常感谢!或者使用
argparse
…)哦,如果您将一个带引号的字符串传递给Python,它将自动将其视为一个参数?完全正确;引用是一个shell特性,与Python无关,真的。啊,好的,谢谢。我想我没有对这个问题进行尽职调查。我至少应该试一下,看看这些论点是如何起作用的,而不是假设它不会像你所描述的那样起作用所以,请原谅我的懒惰——非常感谢!或者使用
argparse
…)哦,如果您将一个带引号的字符串传递给Python,它将自动将其视为一个参数?完全正确;引用是一个shell特性,与Python无关,真的。啊,好的,谢谢。我想我没有对这个问题进行尽职调查。我至少应该试一下,看看这些论点是如何起作用的,而不是假设它不会像你所描述的那样起作用所以,请原谅我的懒惰——非常感谢!或者使用
argparse
…)