如何从Python调用批处理文件的相对路径
我该如何从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 个回答
2
在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参数是你想要执行批处理文件的路径(比如说,如果批处理文件只希望从某个特定目录调用的话)。编辑一下:对于你的jar文件,设置popen中的cwd为你的jar文件所在的目录。你能把这个路径写成相对路径吗?也就是说相对于Python文件或批处理文件,还是只能写成绝对路径?