2012-11-21 66 views
10

Có thể có một tập lệnh như sau trong python không?Làm thế nào để tạm dừng và chờ nhập lệnh trong một tập lệnh python

... 
Pause 
-> 
Wait for the user to execute some commands in the terminal (e.g. 
    to print the value of a variable, to import a library, or whatever). 
The script will keep waiting if the user does not input anything. 
-> 
Continue execution of the remaining part of the script 

Về cơ bản, tập lệnh cho phép điều khiển thông dịch dòng lệnh python tạm thời và tiếp tục sau khi người dùng hoàn thành phần đó.

Edit: Những gì tôi đưa ra (lấy cảm hứng từ câu trả lời) là một cái gì đó như sau:

x = 1 

i_cmd = 1 
while True: 
    s = raw_input('Input [{0:d}] '.format(i_cmd)) 
    i_cmd += 1 
    n = len(s) 
    if n > 0 and s.lower() == 'break'[0:n]: 
    break 
    exec(s) 

print 'x = ', x 
print 'I am out of the loop.' 
+0

Câu hỏi này yêu cầu * REPL * ([Read-Eval-Print-Loop] (https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop)) . Có một số gợi ý về [một câu hỏi tương tự] (http://stackoverflow.com/questions/1395913/how-to-drop-into-repl-read-eval-print-loop-from-python-code), bao gồm ' code.InteractiveInterpreter() 'và' pdb'. – Possum

Trả lời

19

nếu bạn đang sử dụng python 2.x: raw_input()

python 3.x: input()

Ví dụ:

# do some stuff in script 
variable = raw_input('input something!: ') 
# do stuff with variable 
+0

Cảm ơn, nhưng có lẽ tôi không đủ rõ ràng. Điều tôi muốn là, kịch bản dừng tại một thời điểm nào đó (vị trí được chỉ định khi viết kịch bản), sau đó cung cấp điều khiển cho trình thông dịch, để người dùng có thể làm bất cứ điều gì anh ta/cô ấy muốn, ví dụ, để in một thứ gì đó, để nhập một số thư viện hoặc thậm chí thoát toàn bộ tập lệnh. Điều này là phổ biến trong một số ngôn ngữ kịch bản cho máy tính khoa học (chẳng hạn như IDL), nhưng tôi không chắc chắn liệu nó có thể trong python hay không. Tôi cho rằng hàm raw_input() không thể làm điều này? – FJDU

+0

Vâng, có lẽ tôi có thể sử dụng exec() để thực thi chuỗi trả về của raw_input. – FJDU

+0

hmmm Tôi không biết cách nào để cung cấp cho người dùng quyền kiểm soát hoàn toàn trình thông dịch ở giữa tập lệnh .... bạn có thể nhận được phần nào gần bằng cách sử dụng hàm 'eval()' và sử dụng điều này để thực hiện bất cứ điều gì người dùng nhập vào, và sau đó làm một cái gì đó khó khăn để giữ cho nó mở. –

1

Tôi nghĩ rằng bạn đang tìm kiếm điều này:

import re 

# Get user's name 
name = raw_input("Please enter name: ") 

# While name has incorrect characters 
while re.search('[^a-zA-Z\n]',name): 

    # Print out an error 
    print("illegal name - Please use only letters") 

    # Ask for the name again (if it's incorrect, while loop starts again) 
    name = raw_input("Please enter name: ") 
5

Cách tốt nhất tôi biết để làm điều này là sử dụng trình gỡ lỗi pdb. Vì vậy, đặt

import pdb 

ở đầu chương trình của bạn sau đó sử dụng

pdb.set_trace() 

cho "tạm dừng" của bạn Đồng (PDB) nhắc bạn có thể nhập lệnh như

(Pdb) print 'x = ', x 

và bạn cũng có thể bước qua mã, mặc dù đó không phải là mục tiêu của bạn ở đây. Khi bạn hoàn tất, chỉ cần nhập

(Pdb) c 

hoặc bất kỳ tập hợp con nào của từ 'tiếp tục' và mã sẽ tiếp tục thực hiện.

Giới thiệu dễ dàng về trình gỡ lỗi kể từ tháng 11 năm 2015 là https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/ nhưng có nhiều khóa như vậy nếu bạn google 'python debugger' hoặc 'python pdb'.

Các vấn đề liên quan