如何使用Golang获得tty大小?我正在尝试通过执行stty size
命令来执行此操作,但是我无法正确编写代码。
package main
import (
"os/exec"
"fmt"
"log"
)
func main() {
out, err := exec.Command("stty", "size").Output()
fmt.Printf("out: %#v\n", out)
fmt.Printf("err: %#v\n", err)
if err != nil {
log.Fatal(err)
}
}
输出:
out: []byte{}
err: &exec.ExitError{ProcessState:(*os.ProcessState)(0xc200066520)}
2013/05/16 02:35:57 exit status 1
exit status 1
我认为这是因为Go产生了一个与当前tty无关的进程,该进程正在使用该进程。如何将命令与当前终端相关联以获取其大小?
如果您给子进程授予对父进程的访问权限,则它可以工作stdin
:
package main
import (
"os/exec"
"fmt"
"log"
"os"
)
func main() {
cmd := exec.Command("stty", "size")
cmd.Stdin = os.Stdin
out, err := cmd.Output()
fmt.Printf("out: %#v\n", string(out))
fmt.Printf("err: %#v\n", err)
if err != nil {
log.Fatal(err)
}
}
产量:
out: "36 118\n"
err: <nil>
问题 你需要知道当前终端的大小以便正确的格式化输出。 解决方案 使用 os.get_terminal_size() 函数来做到这一点。 代码示例: >>> import os >>> sz = os.get_terminal_size() >>> sz os.terminal_size(columns=80, lines=24) >>> sz.columns 80 >>> sz.lines 24
问题内容: 我一直在寻找一种从C程序中获取终端宽度的方法。我不断提出的思路是: 但是每次我尝试得到 这是执行此操作的最佳方法,还是有更好的方法?如果没有,我该如何工作? 编辑:固定代码是 问题答案: 您是否考虑过使用getenv()?它使您可以获取包含端子列和行的系统环境变量。 或者,使用您的方法,如果您想查看内核显示的终端大小(最好是在调整终端大小时),则需要使用TIOCGWINSZ而不是TIO
问题内容: 我可以使用执行终端命令,但是我想捕获该命令的输出。我怎样才能做到这一点? 问题答案: import subprocess >>> cmd = [ ‘echo’, ‘arg1’, ‘arg2’ ] >>> output = subprocess.Popen( cmd, stdout=subprocess.PIPE ).communicate()[0] >>> print output a
问题内容: 我对和的内存成本感到好奇,因此我编写了一个程序来比较大小。我通过获得内存大小,但是显然这是错误的,因为当我更改大小时,输出是相同的。 问题答案: 并且仅返回传递值的大小,而无需递归遍历数据结构和添加指针值的大小。 slice是相对简单的结构:,并且由于我们知道它引用了后备数组,因此我们可以轻松地“手动”计算其大小,例如: 输出(在Go Playground上尝试): 地图是更复杂的数据
问题内容: 我尝试了几种方法来获取文件大小,但始终为零。 我在日志中: 问题答案: 使用而不是 +调用attr上的.fileSize()。 在Swift 2.0中,我们使用do try catch模式,如下所示: 在Swift 3.x / 4.0中:
您可以get get client-go的一个版本,例如get get k8s.io/client-go/1.4/...或者获取k8s.io/client-go/1.4/kubernetes。 现在当我这么做的时候。这是输出- 警告:“k8s.io/client-go/1.4/...”匹配的无包无法加载包:包。:/users/shubhadeeproychowdhury/projects/Go/s