ฉันต้องการอ่านข้อมูลจากแป้นพิมพ์ใน python
ฉันลองสิ่งนี้:
nb = input('Choose a number')
print ('Number%s \n' % (nb))
แต่มันไม่ได้ผลไม่ว่าจะเป็นคราสหรือในเทอร์มินัลมันจะหยุดคำถามเสมอ ฉันพิมพ์ตัวเลขได้ แต่ไม่มีอะไรเกิดขึ้น
คุณรู้ไหมว่าทำไม?
ฉันต้องการอ่านข้อมูลจากแป้นพิมพ์ใน python
ฉันลองสิ่งนี้:
nb = input('Choose a number')
print ('Number%s \n' % (nb))
แต่มันไม่ได้ผลไม่ว่าจะเป็นคราสหรือในเทอร์มินัลมันจะหยุดคำถามเสมอ ฉันพิมพ์ตัวเลขได้ แต่ไม่มีอะไรเกิดขึ้น
คุณรู้ไหมว่าทำไม?
คำตอบ:
ลอง
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"
ดูเหมือนว่าคุณกำลังผสม Pythons ต่างกันที่นี่ (Python 2.x เทียบกับ Python 3.x) ... โดยพื้นฐานแล้วถูกต้อง:
nb = input('Choose a number: ')
ปัญหาคือรองรับเฉพาะใน Python 3 ตามที่ @sharpner ตอบไว้สำหรับ Python (2.x) เวอร์ชันเก่าคุณต้องใช้ฟังก์ชันraw_input
:
nb = raw_input('Choose a number: ')
หากคุณต้องการแปลงเป็นตัวเลขคุณควรลอง:
number = int(nb)
... แม้ว่าคุณจะต้องคำนึงว่าสิ่งนี้อาจทำให้เกิดข้อยกเว้นได้:
try:
number = int(nb)
except ValueError:
print("Invalid number")
และหากคุณต้องการพิมพ์ตัวเลขโดยใช้การจัดรูปแบบstr.format()
ขอแนะนำใน Python 3 :
print("Number: {0}\n".format(number))
แทน:
print('Number %s \n' % (nb))
แต่ทั้งสองตัวเลือก ( str.format()
และ%
) ทำงานได้ทั้งใน Python 2.7 และ Python 3
space
หลังสตริงของคุณเสมอเพื่อให้ผู้ใช้ป้อนข้อมูลของเขาหากสงบ Enter Tel12340404
เทียบกับEnter Tel: 12340404
. ดู! : P
เนื่องจากการบล็อกการป้อนข้อมูลด้วยแป้นพิมพ์ (เนื่องจากinput()
บล็อกฟังก์ชัน) มักไม่ใช่สิ่งที่เราต้องการทำ (เรามักต้องการทำสิ่งอื่น ๆ ต่อไป) ต่อไปนี้เป็นตัวอย่างแบบมัลติเธรดที่ถูกถอดออกเพื่อสาธิตวิธีการทำงานของคุณ แอปพลิเคชันหลักในขณะที่ยังคงอ่านในอินพุตแป้นพิมพ์ทุกครั้งที่มาถึงโปรแกรมหลักขณะที่ยังคงการอ่านในปัจจัยการผลิตแป้นพิมพ์เมื่อใดก็ตามที่พวกเขามาถึง
วิธีนี้ทำงานโดยการสร้างเธรดหนึ่งเธรดเพื่อทำงานในพื้นหลังเรียกอย่างต่อเนื่อง input()
นั้นส่งข้อมูลใด ๆ ที่ได้รับไปยังคิว
ด้วยวิธีนี้เธรดหลักของคุณจะถูกปล่อยให้ทำทุกอย่างที่ต้องการโดยรับข้อมูลอินพุตแป้นพิมพ์จากเธรดแรกเมื่อใดก็ตามที่มีบางสิ่งอยู่ในคิว
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()
"""
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()
$ python3 read_keyboard_input.py
พร้อมสำหรับการป้อนข้อมูลด้วยแป้นพิมพ์:
hey
input_str = เฮ้
สวัสดี
input_str = สวัสดี
7000
input_str = 7000
exit
input_str = exit
ออกจากเทอร์มินัลอนุกรม
ปลาย
input([prompt])
เทียบเท่าeval(raw_input(prompt))
และพร้อมใช้งานตั้งแต่ python 2.6
เนื่องจากไม่ปลอดภัย (เนื่องจาก eval) ควรเลือก raw_input สำหรับแอปพลิเคชันที่สำคัญ
raw_input
ถูกเปลี่ยนชื่อเป็นinput
และไม่ประเมิน
สิ่งนี้ควรใช้งานได้
yourvar = input('Choose a number: ')
print('you entered: ' + yourvar)
input()
อย่างไร