पाइथन लिपि के लिए वैकल्पिक तर्क के रूप में उद्धृत स्ट्रिंग

मेरे पास सरल उपयोगिता स्क्रिप्ट है जिसका उपयोग मैं यूआरएल को फाइलों को डाउनलोड करने के लिए करता हूं। यह मूल रूप से लिनक्स बाइनरी "एरिया 2 सी" के आसपास एक रैपर है।

यहां 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

मैं जो करना चाहता हूं वह एक वैकल्पिक दूसरे तर्क (यूआरआई के बाद) परमिट है जो एक उद्धृत स्ट्रिंग है। यह स्ट्रिंग डाउनलोड की गई फ़ाइल का नया फ़ाइल नाम होगा। तो, डाउनलोड समाप्त होने के बाद, फ़ाइल का नाम दूसरे तर्क के अनुसार बदल दिया गया है। ऊपर दिए गए उदाहरण का उपयोग करके, मैं प्रवेश करने में सक्षम होना चाहता हूं:

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

लेकिन मुझे नहीं पता कि उद्धृत स्ट्रिंग को वैकल्पिक तर्क के रूप में कैसे लेना है। मैं यह कैसे कर सकता हूँ?

0

2 उत्तर

बस sys.argv की लंबाई का परीक्षण करें; यदि यह 2 से अधिक है तो आपके पास अतिरिक्त तर्क है:

if len(sys.argv) > 2:
    filename = sys.argv[2]
0
जोड़ा
ओह, तो यदि आप पाइथन को उद्धृत स्ट्रिंग पास करते हैं, तो यह स्वचालित रूप से इसे एक तर्क के रूप में व्यवहार करेगा?
जोड़ा लेखक synaptik, स्रोत
आह, ठीक है धन्यवाद। मुझे लगता है कि मैंने इस सवाल पर उचित परिश्रम नहीं किया। मुझे कम से कम कोशिश करनी चाहिए और देखें कि तर्क कैसे काम करते हैं, यह मानने के बजाय कि यह वर्णन नहीं करेगा जैसा कि आप वर्णन करते हैं। :) तो, मेरी आलस्य क्षमा करें - और बहुत बहुत धन्यवाद!
जोड़ा लेखक synaptik, स्रोत
या argparse का उपयोग करें ... :)
जोड़ा लेखक mgilson, स्रोत
ठीक ठीक; उद्धरण एक खोल सुविधा है, वास्तव में पाइथन के साथ कुछ भी नहीं करना है।
जोड़ा लेखक Martijn Pieters, स्रोत

यदि आप उनके बीच रिक्त स्थान प्रदान करते हैं तो खोल इसे दूसरे तर्क (सामान्य रूप से) के रूप में पास कर देगा।

उदाहरण के लिए, यहां test.py है:

import sys

for i in sys.argv:
    print(i)

और यहां परिणाम है:

$ python test.py url "folder_name"
test.py
url
folder_name

उद्धरण बिल्कुल कोई फर्क नहीं पड़ता, क्योंकि यह खोल में संभाला जाता है, पायथन नहीं। इसे प्राप्त करने के लिए, बस sys.argv [2] लें।

उम्मीद है की यह मदद करेगा!

0
जोड़ा
धन्यवाद। यह बहुत स्पष्ट है।
जोड़ा लेखक synaptik, स्रोत
आपका स्वागत है!
जोड़ा लेखक aIKid, स्रोत