动态查找正在调用 python 的 C 二进制文件的路径
Dynamically finding the path of C Binary which is invoking python
我在 /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)
这只是一种方法,我相信还有其他可能更好的方法。
我在 /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)
这只是一种方法,我相信还有其他可能更好的方法。