如何从python调用批处理文件的相对路径

时间:2014-06-13 11:24:21

标签: python path relative

如何从python中调用批处理文件的相对路径

希望这已经多次发布了,但是我尝试了其中的一些但是我不清楚,所以发布相同的

我的python脚本'Script.py'位于“d:\ 2014 \ python \ script.py”目录中 从这个文件我想调用一个批处理文件“d:\ 2014 \ input \ batch1.bat”但我想使用popen()函数的相对路径。

在Script.py中

import os, sys
from subprocess import Popen
p = Popen("D:\\2014\\input\\batch1.bat", cwd=r"D:\\2014\\input")
stdout, stderr = p.communicate()

以上代码可以使用但下面的代码不起作用

p = Popen("..\\input\\batch1.bat", cwd=r"..\\input")
stdout, stderr = p.communicate()

给出文件未找到错误

请建议如何解决这个问题。 提前致谢

2 个答案:

答案 0 :(得分:0)

来自python docs

"如果cwd不是None,则子项的当前目录在执行之前将更改为cwd。请注意,在搜索可执行文件时不会考​​虑此目录,因此您无法指定程序相对于cwd的路径。"

提出了一个非常类似的问题here,尝试:

[...]
fn = os.path.join(os.path.dirname(__file__), "..\\input\\batch1.bat")
p = Popen(fn, cwd=r"D:\\2014\\input")
[...]

答案 1 :(得分:0)

Python将把您执行的路径作为当前目录。您可以使用os.getcwd()检索当前目录。

让我说我的桌面上有一个python脚本来测试这个名为pycwd.py的内容:

import os
print os.getcwd()

从不同的地方打电话,它会给出不同的结果:

C:\Users\me>python Desktop\pycwd.py
C:\Users\me
C:\Users\me\Desktop>python pycwd.py
C:\Users\me\Desktop

您想要使用上面建议的SiHa解决方案:

path_to_directory_of_this_python_file = os.path.dirname(__file__)
path_to_your_batch_file = os.path.join(path_directory_of_this_python_file, '..', 'input', 'batch1.bat')
p = Popen(path_to_your_batch_file)

Popen中的cwd参数是您要执行批处理文件的路径(例如,如果批处理文件只需要从某个目录调用)。 编辑:对于你的jarfile:将popen中的cwd设置为jar文件所在的目录。你可以把它作为python文件或批处理文件的相对路径,还是仅作为绝对路径?