对于获取.py源文件的位置感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍获取py文件路径,并为您提供关于c–如何编写模式规则以分隔对象和源文件的位置?、cd可执行文件的位置、findcmd.e
对于获取.py源文件的位置感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍获取py文件路径,并为您提供关于c – 如何编写模式规则以分隔对象和源文件的位置?、cd可执行文件的位置、findcmd.exe文件的位置、hosts文件的位置在哪里的有用信息。
本文目录一览:获取.py源文件的位置(获取py文件路径)
假设我在目录 e中 有一个python文件,如下所示:
/a/b/c/d/e/file.py
在目录 e下, 我有几个文件夹要访问,但是如果从其他任何地方而不是从文件夹 e 执行file.py,则相对路径对我来说不起作用。另外,文件夹
e 可以位于任何位置,但总是与一组子文件夹一起使用,因此绝对路径将不起作用。
首先,有什么功能可以获取相对于源文件位置的绝对路径?
如果没有,有什么想法如何解决呢?抓住使用的命令行并将CWD加在一起?
我的问题是此文件夹正在20个不同的机器和OS上安装,我希望它在尽可能小的配置和必须安装其位置的“规则”下尽可能地动态。
c – 如何编写模式规则以分隔对象和源文件的位置?
./Header ./Srcs ./makefile
文件夹./Header/的内容是两个头文件:
那么header1.h
#ifndef HEADER1_H #define HEADER1_H #include <stdio.h> void func1(); #endif
header2.h
#ifndef HEADER2_H #define HEADER2_H #include <stdio.h> void func2(); #endif
在./Srcs/我有以下srcs:
src1.c
#include <header1.h> void func1() { printf("func1()\n"); }
src2.c
#include <header2.h> void func2() { printf("func2()\n"); }
main.c中
#include <header1.h> #include <header2.h> int main(int argc,char** argv) { func1(); func2(); return 0; }
最后makefile看起来像这样:
CC=gcc INCLUDE=-I./Header/ SRC_DIR=./Srcs/ SRC_LIST=$(addprefix $(SRC_DIR),main.c src1.c src2.c) OBJ_LIST=$(addsuffix .o,$(basename $(SRC_LIST))) OUTPUT=test %.o : %.c $(CC) -c $< -o $@ $(INCLUDE) all : $(OBJ_LIST) $(CC) -o $(OUTPUT) $(OBJ_LIST) clean : $(OUTPUT) $(OBJ_LIST) rm -r $(OUTPUT) $(OBJ_LIST)
执行makefile我得到:
gcc -c Srcs/main.c -o Srcs/main.o -I./Header/ gcc -c Srcs/src1.c -o Srcs/src1.o -I./Header/ gcc -c Srcs/src2.c -o Srcs/src2.o -I./Header/ gcc -o test ./Srcs/main.o ./Srcs/src1.o ./Srcs/src2.o
具体来说,由于我使用的模式规则,所有的目标文件都是在文件夹./Srcs/中生成的,我想要实现的是将所有目标文件放入最终输出所在的目录中,我的具体例子,最终输出将在makefile所在的同一目录中.
如何编写我的makefile以实现这样的目标?
解决方法
#PROjdiR is the folder where your Makefile is PROjdiR := $(realpath $(CURDIR)/..) #SOURCEDIR is the root folder where your sources sub-folder ares SOURCEDIR := $(PROjdiR)/Sources #BUILDDIR is the root folder where your objects will be BUILDDIR := $(PROjdiR)/Build #Dirs are the sub-folder,e.g. Sources/Folder1 and Build/Folder1 Dirs = Folder0 Folder1 Folder2 #Here we create a list of source and builder folders with full path SOURCEDirs = $(foreach dir,$(Dirs),$(addprefix $(SOURCEDIR)/,$(dir))) TARGETDirs = $(foreach dir,$(addprefix $(BUILDDIR)/,$(dir))) #We allow GNU make to search for the sources in all the sources folders VPATH = $(SOURCEDirs) #We define a function to generate a Build/Folder1/%.o: %.c rule for each sub-folder define generateRules $(1)/%.o: %.c @echo Building $$@ $(CC) -c -o $$@ $$< endef #Finally we generate the rule for each build folder $(foreach targetdir,$(TARGETDirs),$(eval $(call generateRules,$(targetdir))))
或者,如果要将所有构建项放在构建目录中:
#PROjdiR is the folder where your Makefile is PROjdiR := $(realpath $(CURDIR)/..) #SOURCEDIR is the root folder where your sources sub-folder ares SOURCEDIR := $(PROjdiR)/Sources #BUILDDIR is the root folder where your objects will be BUILDDIR := $(PROjdiR)/Build #Dirs are the sub-folder,e.g. Sources/Folder1 and Build/Folder1 Dirs = Folder0 Folder1 Folder2 #Here we create a list of source with full path SOURCEDirs = $(foreach dir,$(dir))) #We allow GNU make to search for the sources in all the sources folders VPATH = $(SOURCEDirs) $(BUILDDIR)/%.o: %.c $(CC) -o $@ $<
cd可执行文件的位置
我了解到,使用exec()调用发出的命令的可执行文件应该存储在PATH变量一部分中的目录中。
因此,我ls, chmod, grep, cat
在/ bin中找到的可执行文件。
但是,我找不到的可执行文件cd
。
它在哪里?
答案1
小编典典进程只能影响其自己的工作目录。当可执行文件由外壳执行时,它将作为子进程执行,因此cd可执行文件(如果存在)将在不影响父进程(外壳)的情况下更改该子进程的工作目录,因此cd命令必须实现为内置的shell,实际上在shell自己的进程中执行。
findcmd.exe文件的位置
我build立了一个依赖于“cmd.exe”来执行一些任务的c ++程序。 现在我为了testing的目的,该文件的path是“c: windows system32 cmd.exe”。 我的问题是有任何C ++ API,返回该文件的path,知道我的程序必须在win32和win64上工作。
使用Qt来创build一个几乎原生的Windows应用程序?
从文件读取() – 阻塞与非阻塞行为
C中的堆大小限制
linux中的段错误(C中的套接字编程(TCP)
C#Windows服务 – 启动,然后自动停止
解释器路径在可以使用GetEnvironmentvariable()读取的%COMSPEC%环境变量中可用。
GetSystemDirectory是一个选项。 对于32位应用程序,它将返回32位系统目录。 对于x64应用程序,它将返回64位本机系统目录。
你也可以在cmd.exe使用CreateProcess或者ShellExecuteEx ,除非你特别担心有人操纵搜索路径并且弄错了cmd.exe否则它应该找不到路径。
如果您正在启动.cmd文件,那么您可以使用ShellExecuteEx和ShellExecuteEx执行此操作。 通常对于Windows桌面应用程序,推荐使用ShellExecuteEx来启动其他程序。 例如,下面的代码将启动运行test.cmd脚本的命令提示符并等待结果:
#include <windows.h> #include <stdio.h> #pragma comment(lib,"shell32.lib") void main() { SHELLEXECUTEINFOW info = {}; info.cbSize = sizeof( info ); info.lpVerb = L"open"; info.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_NOASYNC | SEE_MASK_NOCLOSEPROCESS; info.lpFile = L"test.cmd"; info.lpParameters = nullptr; // Command-line parameters info.lpDirectory = nullptr; // Working directory to set info.nShow = SW_SHOW; if( !ShellExecuteExW( &info ) ) { printf("ERRORn"); } else { // Wait for process to finish. WaitForSingleObject( info.hProcess,INFINITE ); // Return exit code from process DWORD exitcode; GetExitCodeProcess( info.hProcess,&exitcode ); CloseHandle( info.hProcess ); printf("Finished with exit code %un",exitcode); } }
你也可以使用:
info.lpFile = L"cmd.exe"; info.lpParameters = L"/c test.cmd";
使用ShellExecuteEx而不是CreateProcess主要原因是ShellExecuteEx可以使用适当的清单元素处理exes的管理员高度请求。 如果目标EXE需要比当前进程更高的权限, CreateProcess将会失败。
hosts文件的位置在哪里
hosts文件是是每一台windows系统中都会存在的一个文件,那么hosts文件是在我们电脑中的哪一个位置呢?小编今天为大家带来的就是windows下的hosts文件位置,感兴趣的话就快来看看吧。
【hosts文件问题解答大全】
windows下的hosts文件位置:
方法一:
正常情况下载HOSTS文件都是存在于“c:windowssystem32driversetc”中的!如下图所示即可找到hosts文件的位置。
方法二:
1、同时按下Win+R组合键。
2、在打开的运行框中输入c:windowssystem32driversetc(可以复制)后点击确定按钮即可快速打开hosts文件。
(以上就是windows下的hosts文件位置的所有内容!如果对您的问题有所帮助的话就快关注小编(jb51.cc)吧,我们会为你带来更多优秀的文章)
今天关于获取.py源文件的位置和获取py文件路径的分享就到这里,希望大家有所收获,若想了解更多关于c – 如何编写模式规则以分隔对象和源文件的位置?、cd可执行文件的位置、findcmd.exe文件的位置、hosts文件的位置在哪里等相关知识,可以在本站进行查询。
本文标签: