3

这可能是一个快速修复,但我遇到了停顿,希望您能提供帮助。请多多包涵,我不熟悉命令行环境。

我刚开始使用名为 Flask 的 Python 框架。它已成功安装,我启动并运行 Hello World。当我在浏览器中调用程序时,控制台正在向我发送日志。

要退出控制台日志,我按 ctrl-z (^Z) ~~可能是错误开始的地方?~~ 并提示:

[1]+  Stopped                 python hello.py

现在,当我a)尝试在浏览器中运行程序或b)在命令行中运行脚本时,python hello.py我抛出了一个错误:

socket.error: [Errno 48] Address already in use

..当然还有许多其他行打印到控制台。

一个好的答案应该包括我做错了什么以及我可以做些什么来解决它,并且一个被接受的答案还应该包括为什么;)

4

3 回答 3

7

你猜对了,Ctrl-Z就是让你陷入困境的原因。您的问题是Ctrl-Z实际上使应用程序暂停,而不是终止。要终止程序,您需要Ctrl- C

您的程序正在使用它配置使用的套接字。尝试重新启动程序会导致新的 Python 实例尝试使用您已配置程序使用的套接字 - 该套接字由已停止的程序持有。

从这里你有一些选择:

  • 在带有停止的 Python 实例的 shell 中,您可以键入%1fg 1返回运行您停止的 Python 实例,然后将其作为终端显示的内容。
    • 完成上述操作后,您可以键入Ctrl-C并结束正在运行的 Python 实例,从而使套接字可用于新的 Python 实例。
  • 在同一个 shell 中,您可以键入bg 1,这将导致该 Python 实例在后台运行,而不是显示到终端。然后应用程序应该变得响应。在任何时候,您都可以键入fg 1该命令行以使其再次显示到终端。

还有其他可用选项,包括ps用于查找 Python 实例的进程 ID,然后kill在找不到运行它的命令行时使用 向该进程发送信号。

shell 的手册页应该为您提供有关作业控制的更多帮助。您可以使用该man命令阅读手册。键入man bash以阅读bash手册。如果您在其他 shell 上运行,则可以man使用该 shell 的名称进行调用。

于 2013-05-09T20:52:11.643 回答
5

当你点击CTRL+时你所做Z的是你停止了你的程序并停留在后台。

它与您的终端断开连接。现在,如果您要键入fg 1,您会得到它。与此同时,该程序位于内存中,其所有 IO 等都被占用。因此,您无法再次启动该程序。但由于它已停止且未通过处理器运行,因此您也无法使用 Web 部件。如果您想避免终端输出,请重定向到文件 ( python hello.py > hello.log) 或者/dev/null如果您不想看到输出 ( python hello.py > /dev/null)。

于 2013-05-09T20:51:42.813 回答
0

我不明白如何fg1在我的 Linux 环境中输入,但至少我可以告诉你如何以正确的方式输入。我曾经在Ctrl+上停留Z了很长时间,并认为 API 已关闭……这是我的做法,希望对您有所帮助。

输入 sudo python xxx.py。它将运行您的 API。提示将询问您的密码(因为 sudo),一旦您输入正确的密码,windows 会在下面显示类似这样的内容。

Bottle server starting up...
Listening on http://0.0.0.0:port_number/
Hit Ctrl-C to quit. 

如果您想在不关闭 API 的情况下退出此对话框,请输入Ctrl+ athen d。所以按Ctrl+a键(什么都不会启动)然后松开它们并按d。这将断开屏幕并让您回到正常的命令提示符。

于 2013-12-31T16:16:44.137 回答