Làm thế nào để giữ cho một cửa sổ đầu ra kịch bản Python mở?


191

Tôi mới bắt đầu với Python. Khi tôi thực thi tệp kịch bản python trên Windows, cửa sổ đầu ra xuất hiện nhưng ngay lập tức biến mất. Tôi cần nó ở lại đó để tôi có thể phân tích đầu ra của tôi. Làm thế nào tôi có thể giữ cho nó mở?


6
+1000 muộn màng. Tôi đang sử dụng python làm ngôn ngữ giảng dạy cho một người bạn sử dụng Windows và tôi không thể tin được có bao nhiêu rắc rối (ít nhất là dựa trên tài liệu hiện có) đến nơi chúng tôi có thể chạy tập lệnh và xem đầu ra.
Cascabel

2
chỉ cần kéo / thả tập lệnh của bạn vào cửa sổ cmd
JinSnow

Bạn sẽ nghĩ cửa sổ đầu ra nên mở theo mặc định. Nó làm khi chạy Python trong Mac OS. Rất bực bội
Fandango68

Tôi sẽ liên kết một câu hỏi khác Giữ Windows Console mở sau Lỗi Python với câu hỏi này (tôi đã đăng câu trả lời để gỡ lỗi bằng cách kéo và thả tập lệnh python.)
akinuri

Xem câu trả lời mà @maurizio đăng dưới đây - đó là câu duy nhất không cần bạn thay đổi tập lệnh python của bạn.
roryhewitt

Câu trả lời:


156

Bạn có một vài lựa chọn:

  1. Chạy chương trình từ một thiết bị đầu cuối đã mở. Mở một dấu nhắc lệnh và gõ:

    python myscript.py

    Để làm việc đó, bạn cần python thực thi trong đường dẫn của bạn. Chỉ cần kiểm tra cách chỉnh sửa các biến môi trường trên Windows và thêm C:\PYTHON26(hoặc bất kỳ thư mục nào bạn đã cài đặt python vào).

    Khi chương trình kết thúc, nó sẽ đưa bạn trở lại dấu nhắc cmd thay vì đóng cửa sổ.

  2. Thêm mã để chờ ở cuối tập lệnh của bạn. Đối với Python2, thêm ...

    raw_input()

    ... ở cuối đoạn script làm cho nó chờ Enterkhóa. Phương pháp đó gây khó chịu vì bạn phải sửa đổi tập lệnh và phải nhớ xóa nó khi hoàn tất. Đặc biệt khó chịu khi kiểm tra tập lệnh của người khác. Đối với Python3, sử dụng input().

  3. Sử dụng một trình soạn thảo tạm dừng cho bạn. Một số trình soạn thảo được chuẩn bị cho python sẽ tự động tạm dừng cho bạn sau khi thực hiện. Các trình soạn thảo khác cho phép bạn định cấu hình dòng lệnh mà nó sử dụng để chạy chương trình của bạn. Tôi thấy nó đặc biệt hữu ích khi cấu hình nó là " python -i myscript.py" khi chạy. Điều đó đưa bạn đến một lớp vỏ trăn sau khi kết thúc chương trình, với môi trường chương trình được tải, do đó bạn có thể tiếp tục chơi với các biến và gọi các hàm và phương thức.


8
+1 cho mục 3. Tôi sử dụng Scite làm trình soạn thảo Python của mình và nó chỉ đơn giản giữ đầu ra trong cửa sổ đầu ra của chính nó. Điều này thực sự hữu ích vì bạn có khả năng có thể thấy đầu ra của nhiều hơn một lần chạy trong một cửa sổ.
Joris Timmermans

Tôi có thể thấy đầu ra bằng cách chạy nó từ một thiết bị đầu cuối đã mở. Nhưng tôi cần cung cấp địa chỉ script hoàn chỉnh trong lệnh python? Điều đó có thể tránh được không? Khi tôi sử dụng phương thức raw_input (), nó sẽ cho tôi NameError: name 'raw_input'is không được xác định. Bạn có thể đề xuất một trình soạn thảo tự động tạm dừng sau khi thực hiện không?
rohitmishra

1
@movingahead: có lẽ bạn đang sử dụng python 3? trong python 3, nó được đổi tên thành input (). Nhưng tôi sẽ sử dụng python 2.6 ngay bây giờ, vì python 3 thiếu các thư viện bên thứ ba quan trọng chưa được chuyển. (xem các câu hỏi khác về python 2vs3). Về trình chỉnh sửa, tôi không sử dụng windows, notepad ++ cho phép bạn định cấu hình lệnh. Tôi sử dụng emacs có phiên bản windows, nhưng tôi không bao giờ sử dụng nó.
nosklo

@nosklo cảm ơn !! Yah Tôi đang sử dụng Python 3. Làm những thứ cơ bản bây giờ vì vậy không có vấn đề gì. Tôi sẽ thử notepad ++. Hiện đang thử Pydev cho Eclipse
rohitmishra

@movingahead Mình dùng studio Aptana. (pydev đóng gói sẵn). nó thật sự tốt. không có gì để nói.
v.oddou

51

cmd /klà cách điển hình để mở bất kỳ ứng dụng bảng điều khiển nào (không chỉ Python) với cửa sổ bàn điều khiển sẽ vẫn còn sau khi đóng ứng dụng. Cách dễ nhất tôi có thể nghĩ để làm điều đó, là nhấn Win + R, nhập cmd /kvà sau đó kéo và thả tập lệnh bạn muốn vào hộp thoại Run.


3
Câu trả lời tuyệt vời. Bạn nên có cái này
Jagu

1
Chỉ cần fyi cho lệnh os.system python bạn sẽ thực hiện os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay

1
cmd /klà chỉ dành cho Windows. Tôi không thể giúp với một sự thay thế Mac, xin lỗi.
tzot

Bạn có phải kéo tập lệnh, bao gồm cả lệnh Python không? Xin lỗi tôi có thể có một ví dụ xin vui lòng? Tôi là người mới, rất mới với Python dưới cửa sổ.
Fandango68

1
Câu trả lời này là thẳng nhất và thực hiện chính xác những gì tôi cần trong môi trường windows. Khi chương trình thực thi, cửa sổ terminal sẽ mở.
CameronAtkinson

39

Bắt đầu tập lệnh từ cửa sổ cmd đã mở hoặc ở cuối tập lệnh thêm một cái gì đó như thế này, trong Python 2:

 raw_input("Press enter to exit ;)")

Hoặc, trong Python 3:

input("Press enter to exit ;)")

1
"Bất kỳ khóa nào" sẽ không hoạt động, chỉ Enter will (hoặc Ctrl + D, tùy thuộc vào vị trí của chúng tôi).
Daniel Andersson

1
@DanielAndersson yep, đã thay đổi văn bản
Anurag Uniyal

54
Nếu bạn nghĩ về nó, thật sâu sắc khi chỉ "nhập" mới cho phép bạn "thoát" ...
Joel B

19

Để giữ cho cửa sổ của bạn mở trong trường hợp ngoại lệ (chưa, trong khi in ngoại lệ)

Con trăn 2

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
        print "Press Enter to continue ..." 
        raw_input() 

Để giữ cho cửa sổ mở trong mọi trường hợp:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
    finally:
        print "Press Enter to continue ..." 
        raw_input()

Con trăn 3

Đối với Python3, bạn sẽ phải sử dụng input()thay thếraw_input() và dĩ nhiên điều chỉnh các printcâu lệnh.

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except BaseException:
        import sys
        print(sys.exc_info()[0])
        import traceback
        print(traceback.format_exc())
        print("Press Enter to continue ...")
        input() 

Để giữ cho cửa sổ mở trong mọi trường hợp:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
except BaseException:
    import sys
    print(sys.exc_info()[0])
    import traceback
    print(traceback.format_exc())
finally:
    print("Press Enter to continue ...")
    input()

14

bạn có thể kết hợp các câu trả lời trước: (cho người dùng Notepad ++)

nhấn F5 để chạy tập lệnh hiện tại và gõ lệnh:

cmd /k python -i "$(FULL_CURRENT_PATH)"

bằng cách này, bạn sẽ ở trong chế độ tương tác sau khi thực thi tập lệnh python Notepad ++ của mình và bạn có thể chơi xung quanh với các biến của mình, v.v.


Điều này tạo ra một tệp bó Windows tuyệt vời, nếu bạn thay đổi $ (FULL_CURRENT_PATH) thành tên đường dẫn Windows.
Noumenon

Tôi thấy việc lấy plugin PyNPP dễ dàng hơn nhiều và chỉ định một phím tắt để chạy nó (đừng quên tắt phím tắt F5 trước đó)
JinSnow

11

Tạo một tệp bó Windows với 2 dòng sau:

python your-program.py

pause

2
Hoặc import os os.system("pause")ở cuối .pytập tin
Spikatrix

4
Đây là câu trả lời duy nhất ở đây thậm chí còn chính xác từ xa. Câu trả lời mà yêu cầu làm hư mỗi kịch bản Python đơn bao giờ bạn sẽ chạy với raw_inputhoặc rác khác chỉ đơn giản là sai. Nhập lệnh của bạn vào dòng lệnh theo cách Python mong đợi bạn hoặc sử dụng ngôn ngữ bó đã được cung cấp với MS-DOS cho chính xác mục đích này kể từ tháng 8 năm 1981 .
Kevin J. Chase

1
thậm chí tốt hơn, sử dụng python %*và đặt nó làm một trong những chương trình "mở bằng" để bạn có thể nhấp chuột phải vào tệp .py để mở cửa sổ tạm dừng hoặc tôi cũng đặt nó vào thư mục Anaconda3 của mình (trong PATH) dưới dạng py_pause.bat Tôi có thể chạy py_pause my-prog.py all my argstừ dòng cmd
brian

7

Trong python 2, bạn có thể làm điều đó với: raw_input ()

>>print("Hello World!")    
>>raw_input('Waiting a key...')

Trong python 3 bạn có thể làm điều đó với: input ()

>>print("Hello world!")    
>>input('Waiting a key...')

Ngoài ra, bạn có thể làm điều đó với time.s ngủ (thời gian)

>>import time
>>print("The program will close in 5 seconds")
>>time.sleep(5)

7

Sử dụng atexit, bạn có thể tạm dừng chương trình ngay khi thoát. Nếu một lỗi / ngoại lệ là lý do cho việc thoát, nó sẽ tạm dừng sau khi in stacktrace.

import atexit

# Python 2 should use `raw_input` instead of `input`
atexit.register(input, 'Press Enter to continue...')

Trong chương trình của tôi, tôi đặt lệnh gọi atexit.registertrong exceptmệnh đề, để nó sẽ chỉ tạm dừng nếu có sự cố.

if __name__ == "__main__":
    try:
        something_that_may_fail()

    except:
        # Register the pause.
        import atexit
        atexit.register(input, 'Press Enter to continue...')

        raise # Reraise the exception.

5

Tôi đã có một vấn đề tương tự. Với Notepad ++, tôi thường sử dụng lệnh: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"đóng cửa sổ cmd ngay sau khi mã kết thúc.
Bây giờ tôi đang sử dụng cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"để giữ cho cửa sổ cmd mở.


1
Bạn có thể muốn thêm "; C: \ Python27" vào cuối biến môi trường Đường dẫn. Bằng cách đó, nó có thể được rút ngắn thành 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' - Chính xác những gì câu trả lời ở trên cộng với -i hữu ích.
Bí tích

5

Trên Python 3

input('Press Enter to Exit...')

Sẽ làm mánh khóe.


2

Để giữ cho cửa sổ mở, tôi đồng ý với Anurag và đây là những gì tôi đã làm để giữ cho các cửa sổ của mình mở cho các chương trình loại tính toán ngắn.

Điều này sẽ chỉ hiển thị một con trỏ không có văn bản:

raw_input() 

Ví dụ tiếp theo này sẽ cung cấp cho bạn một thông báo rõ ràng rằng chương trình đã được thực hiện và không chờ đợi trên một dấu nhắc đầu vào khác trong chương trình:

print('You have reached the end and the "raw_input()" function is keeping the window open') 
raw_input()

Ghi chú!
(1) Trong python 3, không có raw_input () , chỉ có input () .
(2) Sử dụng dấu ngoặc đơn để chỉ chuỗi; mặt khác, nếu bạn gõ gấp đôi xung quanh bất cứ thứ gì, chẳng hạn như "raw_input ()", nó sẽ nghĩ rằng đó là một hàm, biến, v.v. và không phải là văn bản.

Trong ví dụ tiếp theo này, tôi sử dụng dấu ngoặc kép và nó sẽ không hoạt động vì nó nghĩ rằng có sự ngắt quãng trong dấu ngoặc giữa "hàm" và "hàm" mặc dù khi bạn đọc nó, tâm trí của bạn có thể hiểu ý nghĩa hoàn hảo của nó:

print("You have reached the end and the "input()" function is keeping the window open")
input()

Hy vọng rằng điều này sẽ giúp những người khác có thể bắt đầu và vẫn chưa biết máy tính nghĩ gì. Nó có thể mất một lúc. : o)


2

Nếu bạn muốn chạy tập lệnh của mình từ lối tắt trên màn hình, nhấp chuột phải vào tệp python của bạn và chọn Send to|Desktop (create shortcut). Sau đó nhấp chuột phải vào phím tắt và chọn Thuộc tính. Trên tab Phím tắt, chọn hộp văn bản Target: và thêm cmd /k vào trước đường dẫn và bấm OK. Phím tắt bây giờ sẽ chạy tập lệnh của bạn mà không cần đóng và bạn không cầninput('Hit enter to close')

Lưu ý, nếu bạn có nhiều phiên bản python trên máy của mình, hãy thêm tên của python cần thiết có thể thực thi được giữa cmd / k và đường dẫn scipt như thế này:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"

Cảm ơn! Điều này thực sự đã giúp tôi rất nhiều. Tôi là một người dùng Linux và không thể hiểu điều này.
Michael Bruce

1

Ngoài inputraw_input, bạn cũng có thể sử dụng một whilevòng lặp vô hạn , như thế này: while True: pass(Python 2.5 + / 3) hoặcwhile 1: pass (tất cả các phiên bản của Python 2/3). Điều này có thể sử dụng sức mạnh tính toán, mặc dù.

Bạn cũng có thể chạy chương trình từ dòng lệnh. Nhập pythonvào dòng lệnh (Mac OS X Terminal) và thông báo Python 3.?.?(Phiên bản Python của bạn) Nó không hiển thị phiên bản Python của bạn, hoặc nói python: command not found, xem xét việc thay đổi giá trị PATH (giá trị enviromentl, được liệt kê ở trên) / type C:\(Python folder\python.exe. Nếu thành công, hãy nhập pythonhoặc C:\(Python installation)\python.exethư mục đầy đủ của chương trình của bạn.


1
Điều này giống như để xe của bạn chạy trong khi bạn đi uống cà phê hoặc ngủ! Nguy hiểm ở nhiều cấp độ
Fandango68

1

Một câu trả lời rất muộn, nhưng tôi đã tạo một tệp Windows Batch pythonbat.batcó tên như sau:

python.exe %1
@echo off
echo.
pause

và sau đó được chỉ định pythonbat.batlàm trình xử lý mặc định cho.py các tệp.

Bây giờ, khi tôi nhấp đúp vào một .py tệp trong File Explorer, nó sẽ mở một cửa sổ giao diện điều khiển mới, chạy tập lệnh Python và sau đó tạm dừng (vẫn mở), cho đến khi tôi nhấn bất kỳ phím nào ...

Không có thay đổi cần thiết cho bất kỳ tập lệnh Python.

Tôi vẫn có thể mở một cửa sổ giao diện điều khiển và chỉ định python myscript.py nếu tôi muốn ...

(Tôi chỉ nhận thấy @maurizio đã đăng câu trả lời chính xác này)


0

Bạn có thể mở PowerShell và gõ "python". Sau khi Python được nhập, bạn có thể sao chép dán mã nguồn từ trình soạn thảo văn bản yêu thích của mình để chạy mã.

Cửa sổ sẽ không đóng.


0

Nếu bạn muốn mở cửa sổ cmd VÀ nằm trong thư mục tệp đang chạy, nó hoạt động ở Windows 10:

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)

0

Tôi đã tìm thấy giải pháp trên môi trường py3 của mình tại win10 chỉ là chạy cmd hoặc powershell với tư cách Quản trị viên và đầu ra sẽ ở cùng một cửa sổ giao diện điều khiển, bất kỳ loại lệnh python nào người dùng chạy sẽ khiến python mở cửa sổ giao diện điều khiển mới.


-1
  1. Tới đây và tải xuống và cài đặt Notepad ++
  2. Tới đây và tải xuống và cài đặt Python 2.7 chứ không phải 3.
  3. Bắt đầu, chạy Powershell. Nhập theo chỉ dẫn. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Đóng Powershell và mở lại nó.
  5. Tạo một thư mục cho các chương trình của bạn. kịch bản mkdir
  6. Mở thư mục cd script
  7. Trong Notepad ++, trong một loại tệp mới: print "hello world"
  8. Lưu tệp dưới dạng hello.py
  9. Quay trở lại powershell và đảm bảo bạn đang ở đúng thư mục bằng cách gõ dir. Bạn sẽ thấy tập tin của bạn hello.py ở đó.
  10. Tại dấu nhắc Powershell: python hello.py

-1

Một cách đơn giản để giữ cho cửa sổ mở:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Bộ đếm là vì vậy mã sẽ không lặp lại.


-1

Cách đơn giản nhất:

import time

#Your code here
time.sleep(60)
#end of code (and console shut down)

Điều này sẽ để lại mã trong 1 phút sau đó đóng nó.


1
Sao mày dám nghiêm túc thế. Vì vậy, không cần thiết. Đó không phải là tất cả những gì câu hỏi này là về và bạn biết nó.
Redgar Tech

-2

Trên windows 10 chèn lúc năn nỉ này:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

Lạ, nhưng nó hoạt động với tôi! (Tất nhiên là cùng với đầu vào () ở cuối)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.