55

我从 Windows 任务栏运行命令行 Python 脚本,方法是使用指向 Python 解释器的快捷方式,并将实际脚本作为参数。

处理完脚本后,解释器终止并关闭输出窗口,这使得无法读取脚本输出。

在按下任何键之前保持解释器窗口打开的最直接方法是什么?

在批处理文件中,可以用暂停来结束脚本。我在 python 中找到的最接近这个的raw_input() 是次优的,因为它需要按返回键(而不是任何键)。

4

13 回答 13

58

一种方法是raw_input()在末尾保留 a,以便脚本在终止之前等待您按 Enter。

于 2009-02-23T12:30:06.483 回答
44

试试os.system("pause")——我用过它,它对我有用。

确保包含import os在脚本的顶部。

于 2010-11-09T04:41:40.850 回答
14

关闭前无需等待输入,只需像这样更改您的命令:

cmd /K python <script>

开关将执行随后/K的命令,但命令解释器窗口保持打开状态,相比之下/C,它执行然后关闭。

于 2009-02-23T12:29:39.153 回答
11

最好的选择:os.system('pause')<-- 这实际上会显示一条消息,说“按任意键继续”,而添加只是raw_input('')不会打印任何消息,只有光标可用。

与答案无关:

os.system("some cmd command")是一个非常棒的命令,因为该命令可以执行任何批处理文件/cmd 命令。

于 2013-03-06T17:44:46.080 回答
7

一种方法是在末尾保留 raw_input() ,以便脚本在终止之前等待您按 Enter 键。

使用 raw_input() 而不是 msvcrt.* 的好处是前者是标准 Python 的一部分(即绝对跨平台)。这也意味着双击脚本文件图标后,脚本窗口将处于活动状态,无需执行

cmd /K python <script>
于 2009-02-23T12:51:41.020 回答
5

在 Windows 上,您可以使用该msvcrt模块。

  • msvcrt.kbhit()
    True如果按键正在等待读取,则 返回。

  • msvcrt.getch()
    读取按键并将结果字符作为字节字符串返回。控制台没有回显任何内容。如果按键不可用,此调用将阻塞,但不会等待 Enter 被按下。如果按下的键是一个特殊的功能键,这将返回'\000'or '\xe0'; 下一次调用将返回键码。使用Control-C此功能无法读取按键。

如果您希望它也适用于类 Unix 系统,您可以使用termiosfcntl模块尝试此解决方案。

于 2009-02-23T12:28:33.133 回答
3

至于按下什么键来关闭它的“问题”,我(以及成千上万的其他人,我敢肯定)只是使用input("Press Enter to close").

于 2017-01-19T01:15:24.260 回答
2

有一个简单的方法可以做到这一点,你可以使用键盘模块的wait功能。例如,您可以这样做:

import keyboard
print("things before the pause")
keyboard.wait("esc") # esc is just an example, you can obviously put every key you want
print("things after the pause")
于 2018-09-21T13:17:24.000 回答
1

让 python 以无缓冲的方式从终端读取单个字符有点棘手,但这里有一个方法可以做到:

配方 134892:在 Windows 和 Unix(Python)上从标准输入读取类似 getch() 的无缓冲字符

于 2010-11-09T04:49:09.253 回答
1

Windows 10开始时插入:

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

奇怪,但它对我有用!( input()当然还有最后)

于 2017-01-27T22:05:42.883 回答
0

外部 WConio 模块可以在这里提供帮助:http: //newcenturycomputers.net/projects/wconio.html

import WConio
WConio.getch()
于 2009-02-23T12:35:08.140 回答
0
import pdb
pdb.debug()

这用于调试脚本。打破也应该有用。

于 2009-02-23T18:35:12.223 回答
0

如果你输入

input("")

它将等待他们按下任何按钮,然后它将继续。您也可以在引号之间放置文本。

于 2014-04-08T20:44:16.503 回答