从脚本中退出 Windows 终端交互模式

Posted

技术标签:

【中文标题】从脚本中退出 Windows 终端交互模式【英文标题】:Exit windows terminal interactive mode from within a script 【发布时间】:2013-12-06 00:50:04 【问题描述】:

设置是这样的:

init.bat 做了一些事情,然后调用python app.py -i

app.py 是程序的核心,根据用户输入,它最终可能会在终端上运行各种程序。

大多数命令都以用户继续输入命令的方式结束,但还有其他命令我想在完成任务后关闭终端。


例子:

用户输入命令:>>> dostuff,完成后关闭终端。

app.py 处理它:

def dostuff():
    #here's the issue.
    #i want it to run a program and close the terminal
    #but since it's on interactive mode, it will stay open after processing the command.
    print('doing some stuff')
    os.system('.\stuff.bat')
    # exits... 

stuff.bat:

@echo i'm gonna do some stuff and close the terminal
rem ...stuff
rem ...stuff
:: exits...

此时,终端应该关闭,但交互模式阻止了这种情况的发生。


我希望我的解释清楚。我需要的是一种强制程序在某些命令后运行和退出的方法,或者一种在不退出当前正在执行的程序的情况下打开/关闭交互模式的方法,但我不确定如何在将终端设置为交互模式后实现。

【问题讨论】:

你试过exit()吗? 是的,但这不是问题。 exit()(在 .py 文件中)和 exit(.bat 文件)都是隐含的。如果我不在交互模式下启动 app.py,终端会按预期关闭,但我正在寻找一种在该模式下启动它的方法,但在某些情况下强制它退出。如果不可能,我认为以另一种方式对其进行编码会很简单:默认退出并强制它在某些情况下进行交互,但我不想那样做,因为我是目前尝试对我来说看起来更干净。 Why the CMD window will not close after Batch file execution? 的可能重复项 可能相关:superuser.com/questions/192550/… 感谢您的链接,但它不是重复的。我知道是交互模式导致它,我明确告诉它在交互模式下运行。我需要的是一种随时关闭它的方法。 【参考方案1】:

我假设你可以控制 python 返回的退出代码。

如果你想继续,只需让 python 返回 0,如果你想退出,则返回 1。然后修改INIT.BAT中对python的调用如下:

python app.py -i || exit

【讨论】:

以上是关于从脚本中退出 Windows 终端交互模式的主要内容,如果未能解决你的问题,请参考以下文章

Shell总结11-shell运行模式

shell进交互式不退出

仅在非交互式运行时如何从 Powershell 脚本返回退出代码

每天三分钟搞定linux shell脚本24 后台模式运行

在linux的终端怎么退出python命令行

在Google Chrome自助服务终端模式/视图中显示关闭选项