我有一个来自图像的 Dockerfile。我想修改它并添加一些文件操作,这些操作将与 FROM 图像给出的不同 WORKDIR 相关。因此,我想在修改 WORKDIR 之前将 WORKDIR 保存到一个变量,并在命令结束后从该变量恢复 WORKDIR。怎么做?
想要的结果:
Dockerfile伪代码:
FROM centos:7
some original commands
some original commands
...
var=WORKDIR #save WORKDIR <== how to do that?
WORDIR /my/path/
my commands
my commands
...
WORKDIR = var # restore path that was before <== how to do that?
Run Code Online (Sandbox Code Playgroud) 我有以下 pytest 目录结构:
system_tests/
??? conftest
??? pytest.ini
?
??? suite_1/
? ??? test_A.py
?
??? suite_2/
??? sub_suite_2a/
? ??? test_B.py
??? sub_suite_2b/
??? test_C.py
Run Code Online (Sandbox Code Playgroud)
当每个测试方法运行时,许多第三方库/进程会在当前工作目录中生成工件。当我从sub_suite文件夹中运行 pytest 时(使用 CLI 或 IDE 的“播放”按钮),文件会sub_suite在我想要的文件夹中生成。但是,当我从system_tests文件夹运行 pytest以运行所有测试时,所有工件都在system_tests文件夹中创建,这不是我想要的。
有没有一种简单的方法可以强制 pytest 始终使用测试类文件夹作为工作目录,这样无论我如何或从哪里运行测试,我都会得到相同的结果?
我有一个C#应用程序,其中包含以下代码:
string file = "relativePath.txt";
//Time elapses...
string contents = File.ReadAllText(file);
Run Code Online (Sandbox Code Playgroud)
大部分时间都可以正常工作.该文件是相对于启动应用程序的目录读取的.但是,在测试中,已经发现,如果单独放置大约5个小时,该应用程序将抛出一个FileNotFoundException说法"找不到C:\ Documents and Settings\Adminstrator\relativePath.txt".如果立即运行读取文件的操作,则从正确的位置读取文件,我们称之为"C:\ foo\relativePath.txt"
是什么赋予了?而且,什么是最好的解决方案?解决文件Assembly.GetEntryAssembly().Location?
在Linux中,JVM将工作目标设置为等于来自用户的homefolder.在Windows中,这是jar所在的文件夹.如何找到罐子(来自我的应用程序)所在位置以更改工作目录?
马亭
可能重复:
如何在C中查找可执行文件的位置
嗨,
我正在寻找一种可移植的方法来查找程序的根目录(在C++中).例如,在Linux下,用户可以将代码复制到/ opt,将其添加到PATH,然后执行它:
cp -r my_special_code /opt/
export PATH=${PATH}:/opt/my_special_code/
cd /home/tony/
execution_of_my_special_code
Run Code Online (Sandbox Code Playgroud)
(其中"execute_my_special_code"是/ opt/my_special_code中的程序).
现在,作为"execution_of_my_special_code"的开发人员,是否有一种可移植的编程方法可以发现可执行文件位于/ opt/my_special_code中?
第二个例子是在MS Windows上:如果我当前的工作目录在一个硬盘驱动器上(例如"C:\")而可执行文件放在另一个硬盘驱动器上(例如"D:\")怎么办?
最终,目标是读取与程序代码一起打包的一些预定义配置文件,而不强制用户进入安装目录.
非常感谢提前!
这是我的第一个问题.
我的python脚本打开并使用以下简单功能从当前文本文件中读取:
open("config.ini", "r")
Run Code Online (Sandbox Code Playgroud)
因为这是一个相对路径,所以它应该起作用,因为config.ini被放置在同一目录中,就像脚本在启动时一样,应该是当前工作的目录.
事实上,这在我的所有3个Linux机箱上都能完美运行,但我有一个用户需要支持,因为他在打开config.ini时遇到错误.错误提高是因为
os.path.exists("config.ini")
Run Code Online (Sandbox Code Playgroud)
即使文件在那里也返回false!
试图解决这个问题,我们发现使其工作的唯一方法是将config.ini放在他的主目录中,尽管假设工作目录是另一个.
此外,如果我的脚本试图在当前工作目录中创建一个文件,那么该文件总是在他的家庭目录中创建,所以我认为由于某种原因,他的工作目录总是在家!
我该如何解决这个问题?也许我可以引入绝对路径,但我担心os.getcwd()将返回homedir而不是正确的路径.
我是否应该建议这个用户以某种方式修理他的机器?
对不起这个长问题,但英语不是我的第一语言,我是编码的初学者,所以有一些难以解释.
非常感谢你提前!=)
我有10个光栅文件.我想要做的是这样的:
1)读取R中的第一个栅格(光栅文件)
2)将该文件保存在文件夹中(在循环中创建文件夹)
3)再次读取第二个光栅文件
4)将该文件保存在新文件夹中(也在循环中创建)
5)不断重复10次
这是我设法做的:
for (i in 1:10){
dir.create(paste0("Run",i)) #this creates a new folder called Run[i] where I will save the raster
setwd(paste0("Run",i)) # this makes the Run[i] my working directory so that my first raster is saved in Run[i]
moist<-raster(paste0("R://moist_tif/ind_moist",i,".tif")) # this reads in my raster moist[i]
writeRaster(moist,"moist.tif") # this saves my raster in folder Run[i]
Run Code Online (Sandbox Code Playgroud)
正如您可能注意到循环移动到的那样i+1,Run[i+1]创建了Run[i]我不想要的新文件夹.我想为文件夹中的文件夹Run[i+1]而不是文件夹创建单独的文件夹.希望我能清楚地写出这个问题.谢谢您的帮助.
问候
我在Windows下使用git bash,我想制作一个git alias命令,其概念上是这样的:
[alias]
assume_unchanged_below = "!git ls-files -z $dir | xargs -0 git update-index --assume-unchanged"
Run Code Online (Sandbox Code Playgroud)
其中$dir扩展到git assume_unchanged_below执行的bash shell中的当前工作目录.
即如果我进入C:\somedir\somesubdir并执行,git assume_unchanged_below我会希望它就像我打字一样git ls-files -z C:\somedir\somesubdir | xargs -0 git update-index --assume-unchanged
似乎可以通过获取当前目录git rev-parse --show-prefix.我也知道可以使用匿名函数传递参数,但我无法将这两个概念结合起来以获得我想要的行为.
例如,如果我这样做:
[alias]
assume_unchanged_below = "!f() { \
git ls-files -z $1 | xargs -0 git update-index --assume-unchanged; \
}; f"
Run Code Online (Sandbox Code Playgroud)
然后我可以输入
git assume_unchanged_below `git rev-parse --show-prefix`
Run Code Online (Sandbox Code Playgroud)
它的行为与预期一致($1正确扩展到当前工作目录).
但是,我不想手动传递git rev-parse --show-prefix给别名,我希望它自动推断,这样我只需要输入
git assume_unchanged_below …Run Code Online (Sandbox Code Playgroud) 当我试图获得我的批处理脚本的提升权限时,我发现了两个相关的SO问题
......这导致了部分解决的问题.出于某种原因,我遇到了在VBS脚本中包含空格的文件路径参数的命令行传递问题,所以我试图将解决方案分成3部分并集中在内部(VBS)步骤,然后通过调用a添加最后一步尽管与VBS脚本位于同一文件夹中,但无法找到该VBS中的批处理.我发现,拖放不是"那么简单" 和它使用时的不同.vbs,而不是.bat或.exe用作放置目标.
如果我拖动文件并将其拖放到可执行文件(exe)或批处理文件(bat,cmd)上,则当前工作目录由拖动项目的来源确定.其目录设置为处理它的程序或脚本的工作目录.
如果我将文件放到VBS脚本上,则会有所不同.在Windows 8.1 x64上,C:\Windows\System32即使参数与VBS位于同一文件夹中,我也会观察到它.
我可以简单地使用这样的批处理文件(如拖放中继)
my.vbs %*
Run Code Online (Sandbox Code Playgroud)
获得"正常" .bat行为(drop source指示CWD),但我也想了解它.
这是一个错误还是一个功能?它是否与所有Windows版本一致?
编辑:为显示我如何到达的问题添加背景(在顶部)(+次要更正)
在Git Bash中设置启动目录的命令是什么?
当我启动Git Bash时,启动目录是C驱动器中的Bitbust目录,因此我必须使用cd命令更改工作目录。
但是我认为这是不必要的过程。我希望启动目录成为启动Git Bash的工作目录。