【问题标题】:Running an interactive Python script from a Batch File从批处理文件运行交互式 Python 脚本
【发布时间】:2019-11-28 17:49:10
【问题描述】:

我想从批处理文件运行交互式 Python 程序。我在“pythonw.exe 还是 python.exe?”这个问题中找到了 the answer。有帮助,但并不是我想到的所有问题都得到了解决。我决定尝试使用con:

下面展示了我实现的那种交互:

Microsoft Windows [Version 10.0.18362.476]
(c) 2019 Microsoft Corporation. All rights reserved.

c:\sjt\PY\NEWER>type call_py.bat

@echo off
call python c:\sjt\py\newer\testout.py 1>con: 2>con:
c:\sjt\PY\NEWER>type testout.py
print ("Print works if you can see this.")
strwaiter = raw_input ("raw_input prompt: ")
print ("This string was received by strwaiter in response to the prompt: " + strwaiter)

c:\sjt\PY\NEWER>call_py

Print works if you can see this.
raw_input prompt: Here is my response.
This string was received by strwaiter in response to the prompt: Here is my response.

c:\sjt\PY\NEWER>

我尝试再次运行call_py.bat,但它调用pythonw 而不是python,此尝试没有产生预期的结果。

另外,在我的实验过程中,我尝试在没有12 重定向的情况下调用python。同样,这也没有成功。

我尝试为该问题的相关答案添加评论,但由于我没有所需的声誉而失败。我正在发布这个问题。

  1. 我的实验是否对这个问题的答案有所补充?

  2. 鉴于我对该帖子中给出的技术细节一无所知,为什么在我的批处理文件中调用 python 有效(使用这些重定向)但调用 pythonw 却不行?

【问题讨论】:

    标签: python batch-file interactive


    【解决方案1】:

    PS 请参阅start /?,了解 exe 文件的起始类型差异。

    Windows 中有两种类型的程序。图形和控制台,或者另一种说法是控制台和非控制台。不同之处在于控制台程序会自动获取或继承(如果存在的话)控制台窗口。从而可以访问 StdIn 等(在非控制台世界中不存在)。

    程序是否获得控制台由程序文件头中的标志控制。

    通常控制台程序充当控制台程序,但它们也没有。如果他们愿意,他们可以有窗户。

    GUI 程序通常不执行控制台操作,但如果他们愿意,它们可以附加到其父级的控制台并充当控制台程序。

    没有任何 UI 的程序是 GUI 程序。 GUI程序只是意味着没有控制台。如果一个程序想要窗口,它必须创建它们。

    给你一个想法。如果您要获取记事本的源代码并将其编译为控制台程序(通过更改编译器中的选项)。当您启动它时,将打开一个控制台窗口(或者它将继承当前的窗口),并且将打开普通的记事本窗口。由于记事本没有任何代码可以与控制台交互,因此控制台只会坐在那里。

    编写图形程序并将它们编译为控制台的一个用途是使用控制台窗口来获取调试信息。此外,如果程序崩溃,错误信息也会写入控制台(而不是一些需要点击 50 次才能到达的深埋问题报告)。

    另外需要注意的是,Windows 通过窗口与程序完全通信。控制台程序必须有线程来处理消息并接收非常有限的消息,主要是关于控制台关闭或用户关闭您的程序。

    Windows 消息很多。即使没有用户界面的程序通常也会创建一个隐藏窗口来接收消息(如关机、睡眠、更换壁纸、USB 驱动器到达、关闭程序等)。

    在我的电脑上有 4 个可见的应用程序,我总共有 410 个窗口。

    https://winsourcecode.blogspot.com/2019/05/winlistexe-list-open-windows-and-their.html

    这是 Microsoft 的流程文档。

    https://docs.microsoft.com/en-us/windows/console/about-character-mode-applications

    https://docs.microsoft.com/en-us/windows/win32/procthread/processes-and-threads

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多