python 防止“sem”命令使用终端宽度,需要使用自定义宽度[关闭]

bttbmeg0  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(138)

**已关闭。**此问题为not about programming or software development。目前不接受回答。

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题相关,可以发表评论,说明在何处可以回答此问题。
12小时前关门了
Improve this question
我希望smem捕获整个输出即命令名应完全捕获终端宽度不可知。
我看到-a选项在那里,但它与当前终端宽度捆绑在一起。
我想使用自定义宽度,为此,我尝试下面的事情设置subprocess.check_output()中的env={'COLUMNS':'512'},但这不是只适用于smem命令,适用于top命令。
smem的宽度应该和512一样,但它只取终端宽度。
使用Linux环境

dy1byipe

dy1byipe1#

如果你说的是https://selenic.com/repo/smem,那么源代码似乎根本没有注意到COLUMNS变量,但是许多其他工具都支持这个变量。
相反,该工具调用stty size并期望接收两个整数。
作为一个粗略的解决方法,你可以破解你自己的 Package 器。也许像这样:

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

字符串
如果您将其保存到/usr/local/bin/stty(和chmod +x等)中,它将重定向到/usr/bin中的真实的stty,除非您设置了三个变量COLUMNSROWSSTTY_FORCE_COLUMNS_ROWS

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编写的);但是代码目前的设计方式,您实际上不能。

相关问题