我希望
smem
捕获整个输出,即命令名称应该完全捕获与终端宽度无关的信息。
我看到
-a
选项存在,但它与当前终端宽度相关。
我想使用自定义宽度,因为我尝试在下面的内容中设置
env={'COLUMNS':'512'}
中的 subprocess.check_output()
但这仅不适用于 smem
命令,适用于 top
命令。
smem
应将宽度设为 512
,但仅占终端宽度。
使用
Linux
环境
如果您正在谈论 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 编写的);但就目前代码的设计方式而言,你确实做不到。