Аргументом является URL или путь - PullRequest
9 голосов
/ 21 октября 2011

Какова стандартная практика в Python, когда у меня есть приложение командной строки, принимающее один аргумент,

URL-адрес веб-страницы

или

путь к файлу HTML где-то на диске

(только один)

Достаточно ли кода?

if "http://" in sys.argv[1]:
  print "URL"
else:
  print "path to file"

Ответы [ 3 ]

15 голосов
/ 30 марта 2013
import urlparse

def is_url(url):
    return urlparse.urlparse(url).scheme != ""
is_url(sys.argv[1])
4 голосов
/ 21 октября 2011

Зависит от того, что должна делать программа.Если он просто печатает, получил ли он 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])
1 голос
/ 21 октября 2011

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)
...