কী-বোর্ড-ইনপুট কীভাবে পড়বেন?


123

আমি পাইথনে কীবোর্ড থেকে ডেটা পড়তে চাই

আমি এটি চেষ্টা:

nb = input('Choose a number')
print ('Number%s \n' % (nb))

তবে এটি গ্রহন বা টার্মিনালে কোনও কাজ করে না, এটি সবসময়ই প্রশ্নটির অবসান। আমি একটি নম্বর টাইপ করতে পারি তবে কিছুই হওয়ার পরে না।

তুমি কি জানো কেন?


12
আমি নিশ্চিত যে ওপি একটি নম্বর প্রবেশের পরে কেবল রিটার্ন টিপতে ভুলে গিয়েছিল, এবং উত্তরগুলির কোনওটিরই আসলে প্রশ্নের উত্তর নেই।
অরণ-ফে

উত্তর:


127

চেষ্টা

raw_input('Enter your input:')  # If you use Python 2
input('Enter your input:')      # If you use Python 3

এবং আপনি যদি একটি সংখ্যার মান পেতে চান তবে এটি এটিকে রূপান্তর করুন:

try:
    mode=int(raw_input('Input:'))
except ValueError:
    print "Not a number"

2
মাল্টি-থ্রেডেড সংস্করণ অ-ব্লক করা, যাতে আপনি কীবোর্ড ইনপুটটিতে
গ্যাব্রিয়েল স্ট্যাপলস

84

দেখে মনে হচ্ছে আপনি এখানে পৃথক পাইথন মিশ্রিত করছেন (পাইথন ২.x বনাম পাইথন ৩.x) ... এটি মূলত সঠিক:

nb = input('Choose a number: ')

সমস্যাটি হ'ল এটি কেবল পাইথন 3 এ সমর্থিত @ @ শরপনার উত্তর হিসাবে, পাইথনের পুরানো সংস্করণ (২.x) এর জন্য আপনাকে এই ফাংশনটি ব্যবহার করতে হবে raw_input:

nb = raw_input('Choose a number: ')

আপনি যদি এটি কোনও সংখ্যায় রূপান্তর করতে চান তবে আপনার চেষ্টা করা উচিত:

number = int(nb)

... যদিও আপনাকে বিবেচনায় নেওয়া দরকার যে এটি একটি ব্যতিক্রম বাড়াতে পারে:

try:
    number = int(nb)
except ValueError:
    print("Invalid number")

এবং আপনি যদি বিন্যাসটি ব্যবহার করে নম্বরটি মুদ্রণ করতে চান তবে পাইথন 3 str.format()এ সুপারিশ করা হয়:

print("Number: {0}\n".format(number))

পরিবর্তে:

print('Number %s \n' % (nb))

তবে পাইথন ২.7 এবং পাইথন 3 উভয় ক্ষেত্রে উভয় বিকল্প ( str.format()এবং %) কাজ করে।


1
spaceশান্তি থাকলে ব্যবহারকারী তার ইনপুট প্রবেশের জন্য আপনার স্ট্রিংয়ের পরে সর্বদা একটি রাখুন । Enter Tel12340404বনাম Enter Tel: 12340404। দেখা! : পি
মেহরাদ

সম্পন্ন. পরামর্শের জন্য ধন্যবাদ.
বাল্টাসার্ক

15

অবরুদ্ধকরণ, বহু-থ্রেডযুক্ত উদাহরণ:

কীবোর্ড ইনপুট (যেহেতু উপর ব্লক হিসাবে input()ফাংশন ব্লক) ঘন ঘন হয় না আমরা কি করতে চান (আমরা চাই ঘন ঘন মত অন্যান্য স্টাফ করছেন রাখার), এখানে একটি খুব-ছিনতাই-ডাউন বহু-থ্রেডেড উদাহরণ প্রকট কিভাবে চলমান রাখতে আপনার কীবোর্ড ইনপুটগুলি যখনই আসে সেগুলি পড়ার সময় প্রধান অ্যাপ্লিকেশন

এটি ব্যাকগ্রাউন্ডে চলার জন্য একটি থ্রেড তৈরি করে ক্রমাগত কল করে input()এবং তারপরে কোনও কাতারে প্রাপ্ত কোনও ডেটা পাস করে কাজ করে।

এইভাবে, আপনার মূল থ্রেডটি যা যা করতে চায় তা করতে বাকি রয়েছে, যখনই সারিতে কিছু থাকে তখন প্রথম থ্রেড থেকে কীবোর্ড ইনপুট ডেটা গ্রহণ করা হয়।

1. বেয়ার পাইথন 3 কোড উদাহরণ (কোনও মন্তব্য নেই):

import threading
import queue
import time

def read_kbd_input(inputQueue):
    print('Ready for keyboard input:')
    while (True):
        input_str = input()
        inputQueue.put(input_str)

def main():
    EXIT_COMMAND = "exit"
    inputQueue = queue.Queue()

    inputThread = threading.Thread(target=read_kbd_input, args=(inputQueue,), daemon=True)
    inputThread.start()

    while (True):
        if (inputQueue.qsize() > 0):
            input_str = inputQueue.get()
            print("input_str = {}".format(input_str))

            if (input_str == EXIT_COMMAND):
                print("Exiting serial terminal.")
                break

            # Insert your code here to do whatever you want with the input_str.

        # The rest of your program goes here.

        time.sleep(0.01) 
    print("End.")

if (__name__ == '__main__'): 
    main()

2. উপরের মতো একই পাইথন 3 কোড, তবে বিস্তৃত ব্যাখ্যামূলক মন্তব্য সহ:

"""
read_keyboard_input.py

Gabriel Staples
www.ElectricRCAircraftGuy.com
14 Nov. 2018

References:
- https://pyserial.readthedocs.io/en/latest/pyserial_api.html
- *****https://www.tutorialspoint.com/python/python_multithreading.htm
- *****https://en.wikibooks.org/wiki/Python_Programming/Threading
- /programming/1607612/python-how-do-i-make-a-subclass-from-a-superclass
- https://docs.python.org/3/library/queue.html
- https://docs.python.org/3.7/library/threading.html

To install PySerial: `sudo python3 -m pip install pyserial`

To run this program: `python3 this_filename.py`

"""

import threading
import queue
import time

def read_kbd_input(inputQueue):
    print('Ready for keyboard input:')
    while (True):
        # Receive keyboard input from user.
        input_str = input()

        # Enqueue this input string.
        # Note: Lock not required here since we are only calling a single Queue method, not a sequence of them 
        # which would otherwise need to be treated as one atomic operation.
        inputQueue.put(input_str)

def main():

    EXIT_COMMAND = "exit" # Command to exit this program

    # The following threading lock is required only if you need to enforce atomic access to a chunk of multiple queue
    # method calls in a row.  Use this if you have such a need, as follows:
    # 1. Pass queueLock as an input parameter to whichever function requires it.
    # 2. Call queueLock.acquire() to obtain the lock.
    # 3. Do your series of queue calls which need to be treated as one big atomic operation, such as calling
    # inputQueue.qsize(), followed by inputQueue.put(), for example.
    # 4. Call queueLock.release() to release the lock.
    # queueLock = threading.Lock() 

    #Keyboard input queue to pass data from the thread reading the keyboard inputs to the main thread.
    inputQueue = queue.Queue()

    # Create & start a thread to read keyboard inputs.
    # Set daemon to True to auto-kill this thread when all other non-daemonic threads are exited. This is desired since
    # this thread has no cleanup to do, which would otherwise require a more graceful approach to clean up then exit.
    inputThread = threading.Thread(target=read_kbd_input, args=(inputQueue,), daemon=True)
    inputThread.start()

    # Main loop
    while (True):

        # Read keyboard inputs
        # Note: if this queue were being read in multiple places we would need to use the queueLock above to ensure
        # multi-method-call atomic access. Since this is the only place we are removing from the queue, however, in this
        # example program, no locks are required.
        if (inputQueue.qsize() > 0):
            input_str = inputQueue.get()
            print("input_str = {}".format(input_str))

            if (input_str == EXIT_COMMAND):
                print("Exiting serial terminal.")
                break # exit the while loop

            # Insert your code here to do whatever you want with the input_str.

        # The rest of your program goes here.

        # Sleep for a short time to prevent this thread from sucking up all of your CPU resources on your PC.
        time.sleep(0.01) 

    print("End.")

# If you run this Python file directly (ex: via `python3 this_filename.py`), do the following:
if (__name__ == '__main__'): 
    main()

নমুনা আউটপুট:

keyboard পাইথন 3 রিড_কিবোর্ড_ইনপুট.পি
কীবোর্ড ইনপুটটির জন্য প্রস্তুত:
আরে
ইনপুট_সেট = আরে
হ্যালো
ইনপুট_সেটর = হ্যালো
7000
ইনপুট_সিটার = 7000
প্রস্থান
ইনপুট_সিটার = প্রস্থান
সিরিয়াল টার্মিনাল থেকে প্রস্থান করা হচ্ছে।
শেষ.

তথ্যসূত্র:

  1. https://pyserial.readthedocs.io/en/latest/pyserial_api.html
  2. ***** https://www.tutorialspoint.com/python/python_multithreading.htm
  3. ***** https://en.wikibooks.org/wiki/Python_Programming/ থ্রেডিং
  4. পাইথন: আমি একটি সুপারক্লাস থেকে কীভাবে একটি সাবক্লাস তৈরি করব?
  5. https://docs.python.org/3/library/queue.html
  6. https://docs.python.org/3.7/library/threading.html

সংশ্লিষ্ট / ক্রস-লিঙ্কড:

  1. পাইসারিয়াল নন-ব্লকিং রিড লুপ

4

input([prompt])eval(raw_input(prompt))পাইথন ২.6 এর সমতুল্য এবং উপলভ্য

যেহেতু এটি অনিরাপদ (বিচ্ছিন্নতার কারণে), তাই সমালোচনামূলক অ্যাপ্লিকেশনগুলির জন্য কাঁচা_পিন্ড পছন্দ করা উচিত।


1
তথ্যের এই আকর্ষণীয় জোয়ারের জন্য +1, যদিও আমি এটি পতাকাঙ্কিত করছি কারণ এটি সত্যই কোনও প্রশ্নের উত্তর বা উত্তর হিসাবে একটি তালিকা হিসাবে তালিকাবদ্ধ হওয়া উচিত কারণ এটি সত্যই কোনও উত্তর নেই।
আর্টঅফ ওয়ারফেয়ার

3
এটি কেবল পাইথন ২.x এর ক্ষেত্রেও প্রযোজ্য। পাইথন 3.x এ raw_inputনাম বদলে দেওয়া হয়েছিল inputএবং প্রকাশিত হয় না।
জেসন এস

1
এটি প্রশ্নের উত্তর সরবরাহ করে না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন।
এরিক স্টেইন

@ এরিকস্টাইন - আমার পতাকাটি প্রত্যাখ্যান করা হয়েছিল এবং কিছু প্রতিবিম্বের পরেও আমি সম্মত হই যে আমি খুব তাড়াতাড়ি পতাকাঙ্কিত করেছি। এটি দেখুন: মেটা.স্ট্যাকেক্সেঞ্জার.কমিশন
প্রশ্নগুলি

4

এই কাজ করা উচিত

yourvar = input('Choose a number: ')
print('you entered: ' + yourvar)

7
প্রস্তাবিত অন্যান্য উত্তরগুলির তুলনায় এটি কীভাবে আলাদা input()?
ডেভিড মাকোগন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.