我有一个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": ... }
如何避免将提示打印到子流程输出中?
答案 0 :(得分:1)
这是由称为 command echoing 的功能引起的,该功能默认情况下处于启用状态,但可以使用echo
command来禁用。从文档中:
语法
echo [on | off]
参数
[on | off]
打开或关闭命令回显功能。默认情况下,命令回显处于打开状态。
如果在脚本的第一行添加echo off
,它将禁用所有后续命令的命令回显,但是将回显echo off
命令本身。要抑制该命令的回显,只需在其前面加上@
即可。
符号(@
)作为命令前缀与echo off
具有相同的作用,但仅适用于单个命令。
因此,可以概括一下:只需在外壳程序脚本的第一行添加@echo off
(或Windows术语中的批处理)即可。仅将脚本中执行的命令输出发送到stdout
。