إدخال المستخدم ووسائط سطر الأوامر
-
09-06-2019 - |
سؤال
كيف أحصل على برنامج Python النصي الذي أ) يمكنه قبول إدخال المستخدم وكيف أجعله ب) يقرأ الوسائط إذا تم تشغيله من سطر الأوامر؟
المحلول
لقراءة مدخلات المستخدم يمكنك أن تجرب ال cmd
وحدة لإنشاء مترجم سطر أوامر صغير بسهولة (مع نصوص المساعدة والإكمال التلقائي) و raw_input
(input
لـ Python 3+) لقراءة سطر من النص من المستخدم.
text = raw_input("prompt") # Python 2
text = input("prompt") # Python 3
مدخلات سطر الأوامر موجودة sys.argv
.جرب هذا في البرنامج النصي الخاص بك:
import sys
print (sys.argv)
هناك وحدتان لتحليل خيارات سطر الأوامر: (تم إهماله منذ إصدار Python 2.7، استخدم optparse
argparse
بدلاً من ذلك) و getopt
.إذا كنت تريد فقط إدخال الملفات إلى البرنامج النصي الخاص بك، فانظر إلى قوة fileinput
.
ال مرجع مكتبة بايثون هو صديقك.
نصائح أخرى
var = raw_input("Please enter something: ")
print "you entered", var
أو لبيثون 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
لم يعد متوفرًا في Python 3.x.لكن raw_input
تمت إعادة تسميته input
, ، لذا فإن نفس الوظيفة موجودة.
input_var = input("Enter something: ")
print ("you entered " + input_var)
أفضل طريقة لمعالجة وسيطات سطر الأوامر هي argparse
وحدة.
يستخدم raw_input()
للحصول على مدخلات المستخدم.إذا قمت باستيراد readline module
سيكون لدى المستخدمين لديك تحرير الخط والتاريخ.
الحرص على عدم استخدام input
وظيفة، إلا إذا كنت تعرف ما تفعلونه.على عكس raw_input
, input
سوف يقبل أي تعبير بايثون، لذلك يبدو الأمر كذلك eval
يساعدك هذا البرنامج البسيط في فهم كيفية تغذية إدخال المستخدم من سطر الأوامر وإظهار المساعدة بشأن تمرير وسيطة غير صالحة.
import argparse
import sys
try:
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args = parser.parse_args()
#print the square of user input from cmd line.
print args.square**2
#print all the sys argument passed from cmd line including the program name.
print sys.argv
#print the second argument passed from cmd line; Note it starts from ZERO
print sys.argv[1]
except:
e = sys.exc_info()[0]
print e
1) إيجاد الجذر التربيعي للعدد 5
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) تمرير وسيطة غير صالحة بخلاف الرقم
C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>
استخدم "raw_input" للإدخال من وحدة التحكم/المحطة الطرفية.
إذا كنت تريد فقط وسيطة سطر الأوامر مثل اسم ملف أو شيء من هذا القبيل، على سبيل المثال.
$ python my_prog.py file_name.txt
ثم يمكنك استخدام sys.argv...
import sys
print sys.argv
sys.argv هي قائمة حيث 0 هو اسم البرنامج، لذا في المثال أعلاه، سيكون sys.argv[1] هو "file_name.txt"
إذا كنت تريد الحصول على خيارات سطر الأوامر الكاملة، فاستخدم وحدة optparse.
بيف
إذا كنت تقوم بتشغيل Python <2.7، فأنت بحاجة إلى com.optparse, ، والذي، كما يوضح المستند، سينشئ واجهة لوسائط سطر الأوامر التي يتم استدعاؤها عند تشغيل التطبيق الخاص بك.
ومع ذلك، في Python ≥2.7، تم إهمال optparse، وتم استبداله بـ argparse كما هو مبين أعلاه.مثال سريع من المستندات ...
الكود التالي هو برنامج Python يأخذ قائمة من الأعداد الصحيحة وينتج إما المبلغ أو الحد الأقصى:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
اعتبارا من بايثون 3.2 2.7، هناك الآن argparse لمعالجة وسيطات سطر الأوامر.
إذا كان الإصدار 3.x، فما عليك سوى استخدام:
variantname = input()
على سبيل المثال، تريد إدخال 8:
x = input()
8
x ستساوي 8 ولكنها ستكون سلسلة إلا إذا قمت بتعريفها بطريقة أخرى.
لذلك يمكنك استخدام أمر التحويل، مثل:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
في بايثون 2:
data = raw_input('Enter something: ')
print data
في بايثون 3:
data = input('Enter something: ')
print(data)
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))