自动检测是否使用 GUI 或批处理模式

Automatically detect if using GUI or batch mode

我在 GUI 和 运行ning 脚本中使用 slurm 集群以批处理模式使用 Stata。文件路径需要在每个用例中以不同方式建立,但我想要一个 .do 文件,其中定义了所有路径。

有没有一种方法可以编写可证伪的 if 语句,如果 运行 从 GUI 中计算为真,如果 运行 批量计算为假?

类似于

glob using_gui = T
if $using_gui == T {
    glob dir "/mydir"
} else {
    glob dir "D:/mydir"
}

但其中 $using_gui 自动确定为 TF

您是否运行 GUI 在一台机器上而批处理作业在另一台机器上?如果是这样,您可以为此使用 c(username),因为两台机器将具有不同的用户名。

例如:


if "`c(username)'" == "MyGUILaptop" {
    glob dir "/mydir"
} 
else if "`c(username)'" == "MySlurmCluster" {
    glob dir "D:/mydir"
}

您可以使用display "`c(username)'"查看您正在使用的计算机的用户名。查看更多相关信息 here(免责声明:我写了此链接的书)。

正如上面链接的国家主义者问题中所回答的,这可以用 c(mode) 来回答,所以

if "`c(mode)'" == "batch" {
    glob dir "/mydir" 
} 
else {
    glob dir "D:/mydir" 
}

给猫剥皮的方法有很多种。有关类似选项,请参阅 help creturn