【发布时间】:2021-01-18 21:59:08
【问题描述】:
当我有一个命令行应用程序采用一个参数时,Python 的标准做法是什么
网页的网址
或
磁盘上某处的 HTML 文件的路径
(只有一个)
代码够了吗?
if "http://" in sys.argv[1]:
print "URL"
else:
print "path to file"
【问题讨论】:
当我有一个命令行应用程序采用一个参数时,Python 的标准做法是什么
网页的网址
或
磁盘上某处的 HTML 文件的路径
(只有一个)
代码够了吗?
if "http://" in sys.argv[1]:
print "URL"
else:
print "path to file"
【问题讨论】:
import urlparse
def is_url(url):
return urlparse.urlparse(url).scheme != ""
is_url(sys.argv[1])
【讨论】:
import urllib urllib.parse.urlparse(url).scheme != ""
c:\users\user\foo.txt这样的Windows文件路径返回true。
urlparse(uri).scheme in ('http', 'https',)是否因为Windows uri或uri以file://开头。
取决于程序必须做什么。如果它只是打印它是否有一个 URL,sys.argv[1].startswith('http://') 可能会这样做。如果您必须实际使用 URL 来做一些有用的事情,请这样做
from urllib2 import urlopen
try:
f = urlopen(sys.argv[1])
except ValueError: # invalid URL
f = open(sys.argv[1])
【讨论】:
open() 也会抛出异常。
except IndexError:,因为用户可能没有指定参数,这会引发索引错误。还是我错了?
IOError。我只是展示urlopen 和open 可以如何组合,而不是如何解决更大的问题。这个 sn-p 足以编写一个通用的 open_url_or_file 函数,它只是重新引发它从 open 获得的内容。
Larsmans 可能有效,但它不会检查用户是否实际指定了参数。
import urllib
import sys
try:
arg = sys.argv[1]
except IndexError:
print "Usage: "+sys.argv[0]+" file/URL"
sys.exit(1)
try:
site = urllib.urlopen(arg)
except ValueError:
file = open(arg)
【讨论】: