मैं पायथन में कमांड लाइन के तर्कों का उपयोग कैसे करूं?


362

मैं अपनी परियोजना सेटिंग सेटअप बनाने के लिए अजगर का उपयोग करता हूं, लेकिन मुझे कमांड लाइन तर्क प्राप्त करने में सहायता की आवश्यकता है।

मैंने टर्मिनल पर इसकी कोशिश की:

$python myfile.py var1 var2 var3

मेरी पायथन फ़ाइल में, मैं उन सभी चर का उपयोग करना चाहता हूं जो इनपुट हैं।


1
पाइथन कमांड लाइन ऐप लिखने के लिए बेकर मॉड्यूल एक बेहतरीन टूल है। pypi.python.org/pypi/Baker/1.02
स्पाइक ग्रोनिम

जवाबों:


502

अजगर ट्यूटोरियल इसे समझाता है :

import sys

print(sys.argv)

विशेष रूप से, यदि आप चलाते हैं python example.py one two three:

>>> import sys
>>> print(sys.argv)
['example.py', 'one', 'two', 'three']

7
टैंक, लेकिन अब मुझे उपयोग में अपना var1 लेने की आवश्यकता है? यहाँ क्या होता है .. :)
पेरिसनाटकाइजर

102
दोहा, मिल गया (sys.argv [1]): D
पैरिसकिटकेजर

115
import sys

sys.argv[1:]

आपको तर्कों की एक सूची देगा (अजगर फ़ाइल के नाम सहित नहीं)


5
क्या [1:]मतलब है?
कोलोब कैनियन

8
@KolobCanyon का अर्थ है "इंडेक्स 1 से अंत तक शुरू होने वाली एक सबलिस्ट ले लो", अर्थात पहला तत्व छोड़ें
कामिल जारोज़

@KolobCanyon दूसरा तर्क [1:]ऊपर की तरफ ले जाता है क्योंकि पहला तर्क sys.argvडिफ़ॉल्ट रूप से उस अजगर फ़ाइल का नाम है जिसे आप उदाहरण के लिए चला रहे हैं testrun.py
शमूएल नाडे

94

मैं अत्यधिक सलाह argparseदेता हूं जो पायथन 2.7 और बाद में आता है।

argparseमॉड्यूल, क्योंकि मॉड्यूल (subcommands सहित) सभी मानक उपयोग के मामलों को संभालती है बॉयलर प्लेट कोड को कम कर देता है और अपने कोड और अधिक मजबूत बनाता है, आप के लिए और उपयोग उत्पन्न करता है, चेक और उपयोगकर्ता इनपुट स्वच्छ - सब सामान आप जब आप के बारे में चिंता करने की ज़रूरत sys.argvदृष्टिकोण का उपयोग कर रहे हैं । और यह मुफ्त (बिल्ट-इन) के लिए है।

यहाँ एक छोटा सा उदाहरण है:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

और के लिए उत्पादन python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

और python prog.py 1जैसा कि आप उम्मीद करेंगे:

2

7
गुणवत्ता उत्तर, वास्तव में निश्चित नहीं है कि यहां कोई भी क्यों यहां दिए गए किसी भी अन्य दृष्टिकोण का उपयोग करेगा। खासकर जब से यह अंदर बना है! क्या आप लोगों के पास पार्स करने से बेहतर काम नहीं है?
बेसिनेटर

सिर्फ यह उल्लेख करने के लिए कि आपको आर्गस नेमस्पेस में विशिष्ट तर्क का उपयोग कैसे करना चाहिए: args.counter
माइकएल

1
@ हत्यारे ऐसे मामलों में जब तर्कों की कोई आवश्यकता नहीं होती है।
गतिविधि

डिफ़ॉल्ट मान का उपयोग करने के लिए, कमांड लाइन में विशिष्ट मूल्य के बिना, आप कुछ का उपयोग कर सकते हैं जैसे: parser.add_argument('var3', nargs='?', type=int, default=3)var3 एक वैकल्पिक परम है, यदि आप कमांड लाइन में एक मान निर्दिष्ट नहीं करते हैं जो आप अपने कोड में var3 तक पहुंच सकते हैं, var3 के लिए डिफ़ॉल्ट मान = 3
एल्बिकोको

56

पायथन कोड:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

मंगलाचरण:

$python myfile.py var1 var2 var3

आउटपुट:

Params= var1 var2 var3 

24

आप sys.argvएक सूची के रूप में तर्क प्राप्त करने के लिए उपयोग कर सकते हैं ।

यदि आपको व्यक्तिगत तत्वों तक पहुंचने की आवश्यकता है, तो आप उपयोग कर सकते हैं

sys.argv[i]  

जहां iइंडेक्स है, वहां 0आपको पायथन फाइलनाम निष्पादित किया जाएगा। उसके बाद कोई भी सूचकांक तर्कों को पारित किया जाता है।


6

यदि आप इसे इस तरह कहते हैं: $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

सरणियों के समान ही आपके पास भी है sys.argv[0]जो हमेशा वर्तमान कार्यशील निर्देशिका है।


6
sys.argv[0]वर्तमान कार्य निर्देशिका नहीं है। यह फ़ाइल का नाम है जो निष्पादित कर रहा है।
देखो

5

कुछ अतिरिक्त बातें जो मैं सोच सकता हूं।

जैसा कि @allyed ने कहा कि sys.argv घटकों की एक सूची देता है (प्रोग्राम का नाम सहित), इसलिए यदि आप जानना चाहते हैं कि कमांड लाइन के माध्यम से पारित तत्वों की संख्या आप इसे निर्धारित करने के लिए लेन () का उपयोग कर सकते हैं। इसके आधार पर, आप अपवाद / त्रुटि संदेशों को डिज़ाइन कर सकते हैं यदि उपयोगकर्ता विशिष्ट मापदंडों को पारित नहीं करता है।

यदि आप कमांड लाइन के तर्कों को संभालने के लिए एक बेहतर तरीका खोज रहे हैं, तो मैं आपको https://docs.python.org/2/howto/argparse.html पर देखने का सुझाव दूंगा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.