سؤال

كيف أحصل على برنامج 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)

هناك وحدتان لتحليل خيارات سطر الأوامر: optparse (تم إهماله منذ إصدار Python 2.7، استخدم 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? "))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top