从批处理文件运行交互式Python脚本

时间:2019-11-28 17:49:10

标签: python batch-file interactive

我想从批处理文件运行交互式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时,此尝试未产生预期的结果。

此外,在实验期间,我尝试调用python,而没有重定向12。同样,这也不成功。

我试图在该问题的相关答案中添加评论,但失败了,因为我没有所需的声誉。我改为发布此问题。

  1. 我的实验是否为该问题的答案添加了任何内容?

  2. 鉴于我对该帖子中给出的技术细节一无所知,为什么在批处理文件中调用python可以正常工作(具有这些重定向),但是调用pythonw却不起作用?

1 个答案:

答案 0 :(得分:1)

PS有关启动exe文件的类型的差异,请参见start /?

Windows中有两种程序。图形和控制台,或者说控制台和非控制台的另一种说法。区别在于,控制台程序会自动获取或继承(如果存在)控制台窗口。这样就可以访问StdIn等(在非控制台世界中不存在)。

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

通常,控制台程序充当控制台程序,但实际上却没有。如果需要,他们可以有窗户。

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

没有任何UI的程序是GUI程序。 GUI程序意味着没有控制台。如果程序需要Windows,则必须创建它们。

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

编写图形程序并将其编译为控制台的一种用途是使用控制台窗口来调试信息。另外,如果程序崩溃,错误信息将被写入控制台(而不是一些需要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