在Go语言中如何获取当前进程(可执行文件)的名称?

huangapple go评论162阅读模式
英文:

Get the current process (executable) name in Go?

问题

我在这里寻找的是C语言中argv[0]的等价物。

flag包只提供了对命令行参数的访问,但没有提供可执行文件的名称。

虽然可以使用Getpid()获取进程信息,但我还没有找到可以访问整个命令行的方法。syscall命令的GetCommandLine()似乎只在Windows上可用。

英文:

What I am looking for here is the equivalent of C's argv[0].

The flag package only gives access to command line arguments, but not the executable name.

While one can get the process with Getpid(), I haven't found something that will give me access to the whole command line. The syscall command GetCommandLine() seems only to be available on Windows.

答案1

得分: 45

在Go语言中,传统的C语言中的argv[0]os.Args[0]中是可用的。flags包只是简单地处理切片os.Args[1:]

英文:

The traditional argv[0] in C is available in os.Args[0] in Go. The flags package simply processes the slice os.Args[1:]

答案2

得分: 31

一个更好的方法如下:

filename := filepath.Base(os.Args[0])

这将只显示应用程序的名称,并去除路径。

英文:

A better way as follows:

filename := filepath.Base(os.Args[0])

This will present only the application name and remove the path for you.

答案3

得分: 23

自Go 1.8版本以来,答案是os.Executable()。与其他语言类似,还有os.Args[0]。一个重要的区别是os.Executable()保证返回一个绝对路径。

英文:

Since Go 1.8, the answer is os.Executable(). Similar to other languages, there is also os.Args[0]. One important distinction is that os.Executable() is guaranteed to return an absolute path.

huangapple
  • 本文由 发表于 2011年1月31日 19:46:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/4850489.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定