Python脚本执行带交互式提示符的终端命令失败,如何处理?
解决Python脚本中执行交互式终端命令的问题
首先,你碰到的sh: 1: EXIT: not found错误原因很直接:Shell的退出命令是小写的exit,不是大写的EXIT,改成小写就能解决这个语法错误,但这可能只是表面问题——如果你的真实目标是让./distance这个交互式程序自动退出,而非把它扔后台后退出Shell,那这个调整根本达不到预期效果。
下面分两种核心场景给你针对性的解决方案:
场景1:让交互式程序自动接收exit命令并退出
如果./distance启动后会进入交互式模式,需要手动输入exit才能结束运行,那os.system很难处理这种交互场景,更推荐用Python内置的subprocess模块,它能灵活控制子进程的输入输出流。
示例代码如下:
import subprocess # 启动目标程序,开启标准输入管道以便交互 process = subprocess.Popen( ['./distance', 'vectors_bow.bin'], stdin=subprocess.PIPE, text=True # 用字符串而非字节流交互,更直观 ) # 向程序输入exit命令(加换行符模拟手动回车),触发退出 process.communicate(input='exit\n')
subprocess.Popen负责启动子进程,stdin=subprocess.PIPE允许我们主动向程序输入内容,communicate方法则会把指定内容发送给程序的标准输入,完美模拟手动输入exit的操作。
场景2:确实需要将程序后台运行,再退出当前Shell
如果你的需求和手动操作一致:把./distance扔到后台运行,然后退出当前Shell,那只需要修正命令的大小写即可:
import os os.system('./distance vectors_bow.bin & exit')
注意:执行这个命令后,./distance会在后台持续运行,Python启动的子Shell会直接退出。如果之后需要管理这个后台进程,subprocess依然是更优选择——比如可以记录进程ID,后续用来终止它。
为什么手动执行正常?
你手动在终端操作时,应该是输入了小写的exit,但写脚本时误写成了大写EXIT,Shell的内置命令是区分大小写的,这才导致脚本里出现找不到命令的错误。
内容的提问来源于stack exchange,提问作者Pawandeep Singh
相关产品推荐
相关产品推荐

