在Windows上运行的Shell脚本的输出包含提示

时间:2018-07-19 15:46:16

标签: python windows shell subprocess

我有一个Python脚本,它正在使用subprocess库运行Shell脚本。它必须在任何平台上运行,所以我有2个Shell脚本,一个用于Linux / MacOS(cm),一个用于Windows(cm.cmd)。

假设它们都只包含一个命令example_command -param

运行shell脚本的代码如下:

json = subprocess.run(['cm'], shell=True)

这样,由于外壳程序处理脚本(shell=True)的执行,因此它在Linux / MacOS平台上运行脚本cm,在Windows上运行cm.cmd

该脚本的输出是JSON,并且可以在Linux / MacOS平台上正常运行,唯一的问题是Windows,其中输出中包含明显会破坏JSON的shell提示。

json变量中捕获的输出可能看起来像这样:

My prompt c:\ $ example_command -param
{ "json_data": ... }

如何避免将提示打印到子流程输出中?

1 个答案:

答案 0 :(得分:1)

这是由称为 command echoing 的功能引起的,该功能默认情况下处于启用状态,但可以使用echo command来禁用。从文档中:

  

语法

     

echo [on | off]

     

参数

     

[on | off]打开或关闭命令回显功能。默认情况下,命令回显处于打开状态。

如果在脚本的第一行添加echo off,它将禁用所有后续命令的命令回显,但是将回显echo off命令本身。要抑制该命令的回显,只需在其前面加上@即可。

符号(@)作为命令前缀与echo off具有相同的作用,但仅适用于单个命令。

因此,可以概括一下:只需在外壳程序脚本的第一行添加@echo off (或Windows术语中的批处理)即可。仅将脚本中执行的命令输出发送到stdout