如何从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()
给出文件未找到错误
请建议如何解决这个问题。 提前致谢
答案 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文件或批处理文件的相对路径,还是仅作为绝对路径?