防止“smem”命令使用终端宽度,需要使用自定义宽度

问题描述 投票:0回答:1

我希望

smem
捕获整个输出,即命令名称应该完全捕获与终端宽度无关的信息。

我看到

-a
选项存在,但它与当前终端宽度相关。

我想使用自定义宽度,因为我尝试在下面的内容中设置

env={'COLUMNS':'512'}
中的
subprocess.check_output()
但这仅不适用于
smem
命令,适用于
top
命令。

smem
应将宽度设为
512
,但仅占终端宽度。

使用

Linux
环境

python linux subprocess
1个回答
0
投票

如果您正在谈论 https://selenic.com/repo/smem 源代码似乎根本不关注

COLUMNS
变量,但是许多其他工具都支持该变量。

相反,该工具会调用

stty size
并期望收到两个整数。

作为一种粗略的解决方法,您可以破解自己的包装器。也许是这样的:

#!/bin/sh
if [ "$COLUMNS" ] && [ "$ROWS" ] && [ "$STTY_FORCE_COLUMNS_ROWS" ]; then
     echo "$COLUMNS $ROWS"
else
     exec /usr/bin/stty "$@"

如果您将其保存在

/usr/local/bin/stty
(和
chmod +x
等)中,它将重定向到
stty
中的真实
/usr/bin
,除非您设置了三个变量
COLUMNS
ROWS
STTY_FORCE_COLUMNS_ROWS
。然后您可以像
 那样拨打 
smem

import subprocess
from os import environ

env = environ.copy()
env['COLUMNS'] = '512'
env['ROWS'] = '400'
env['STTY_FORCE_COLUMNS_ROWS'] = 'yes, please'

result = subprocess.check_output(['smem'], env=env)

更好的解决方案是让

smem
允许您
import
它的代码(它也是用 Python 编写的);但就目前代码的设计方式而言,你确实做不到。

© www.soinside.com 2019 - 2024. All rights reserved.