动态查找调用python的C Binary的路径



我在/apps/tools/public/requestAudit有一个名为requestAudit的C二进制可执行文件。此二进制文件在/apps/tools/sf/audits/audit.py下调用 python 脚本。现在我需要找到二进制的绝对路径,即/apps/tools/public/requestAudit在我的audit.py脚本中。这是在二进制可执行文件所在的目录下创建日志文件所必需的。有什么方法可以以编程方式获得它。请注意,即使我从任何地方调用该二进制文件,我也应该始终获取二进制可执行文件的绝对路径。

谢谢

好吧,你需要做的主要事情是在 C 脚本中获取当前工作目录,然后你可以编写一些 C 代码将结果与 argv[0] 组合在一起,以创建文件的完整路径,并在调用它时将其作为命令行参数传递给你的 python 脚本。或者,您可以将 argv[0] 和 getcwd(( 的结果作为参数传递给您的 Python 脚本,这就是我在下面所做的:

requestAudit.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char* argv[]) {
char* cwd = getcwd(NULL, 0);
char* command = "python audit.py ";
char* combine;
// I added 2 because 1 for the null terminator and 1 for the space
// between cwd and argv[0]
size_t len = strlen(command) + strlen(cwd) + strlen(argv[0]) + 2;
combine = malloc(sizeof(*combine)*len);
strncpy(combine, command, strlen(command) + 1);
strncat(combine, cwd, strlen(cwd) + 1);
strncat(combine, " ", 2);
strncat(combine, argv[0], strlen(argv[0]) + 1);
return system(combine);
}

audit.py

import sys
if __name__ == "__main__":
full_path = sys.argv[1] + sys.argv[2][1:]
print(full_path)

这只是一种方法,我相信还有其他可能更好的方法可以做到这一点。

最新更新