GVKun编程网logo

获取.py源文件的位置(获取py文件路径)

11

对于获取.py源文件的位置感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍获取py文件路径,并为您提供关于c–如何编写模式规则以分隔对象和源文件的位置?、cd可执行文件的位置、findcmd.e

对于获取.py源文件的位置感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍获取py文件路径,并为您提供关于c – 如何编写模式规则以分隔对象和源文件的位置?、cd可执行文件的位置、findcmd.exe文件的位置、hosts文件的位置在哪里的有用信息。

本文目录一览:

获取.py源文件的位置(获取py文件路径)

获取.py源文件的位置(获取py文件路径)

假设我在目录 e中 有一个python文件,如下所示:

/a/b/c/d/e/file.py

在目录 e下, 我有几个文件夹要访问,但是如果从其他任何地方而不是从文件夹 e 执行file.py,则相对路径对我来说不起作用。另外,文件夹
e 可以位于任何位置,但总是与一组子文件夹一起使用,因此绝对路径将不起作用。

首先,有什么功能可以获取相对于源文件位置的绝对路径?

如果没有,有什么想法如何解决呢?抓住使用的命令行并将CWD加在一起?

我的问题是此文件夹正在20个不同的机器和OS上安装,我希望它在尽可能小的配置和必须安装其位置的“规则”下尽可能地动态。

c – 如何编写模式规则以分隔对象和源文件的位置?

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可执行文件的位置

cd可执行文件的位置

我了解到,使用exec()调用发出的命令的可执行文件应该存储在PATH变量一部分中的目录中。

因此,我ls, chmod, grep, cat在/ bin中找到的可执行文件。

但是,我找不到的可执行文件cd

它在哪里?

答案1

小编典典

进程只能影响其自己的工作目录。当可执行文件由外壳执行时,它将作为子进程执行,因此cd可执行文件(如果存在)将在不影响父进程(外壳)的情况下更改该子进程的工作目录,因此cd命令必须实现为内置的shell,实际上在shell自己的进程中执行。

findcmd.exe文件的位置

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文件的位置在哪里

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文件的位置在哪里等相关知识,可以在本站进行查询。

本文标签: