我正在运行一个脚本,提示用户选择目录,将绘图保存到该目录,然后使用子流程打开该位置:
root = Tkinter.Tk()
dirname = tkFileDialog.askdirectory(parent=root,initialdir="/",title='Please select a directory')
fig.savefig(dirname+'/XXXXXX.png',dpi=300)
plt.close("all")
root.withdraw()
subprocess.Popen('explorer dirname')
当我运行文件时,我在D:\ Documents中选择一个子目录,图形保存是正确的。但是,子进程只打开D:\ Documents而不是D:\ Documents \ XXX。
本
答案 0 :(得分:1)
使用默认文件资源管理器打开目录:
import webbrowser
webbrowser.open(dirname) #NOTE: no quotes around the name
它可能在Windows上使用os.startfile(dirname)
。
如果您想明确致电explorer.exe
:
import subprocess
subprocess.check_call(['explorer', dirname]) #NOTE: no quotes
dirname
是一个变量。 'dirname'
是一个字符串文字,与dirname
名称无关。
答案 1 :(得分:0)
您只传递字符串'dirname'
而不是您在代码中命名为dirname的变量。由于您(可能)在您的系统上没有名为dirname的目录,因此资源管理器会打开默认值(Documents)。
目录名称中的/ vs \也可能存在问题。如注释中所示,使用os.path模块转换为所需的模块。
你想要像
这样的东西import os
win_dir = os.path.normpath(dirname)
subprocess.Popen('explorer "%s"' %win_dir)
或
import os
win_dir = os.path.normpath(dirname)
subprocess.Popen(['explorer', win_dir])
答案 2 :(得分:-1)
在'explorer dirname'之后添加,Shell = True 如果Shell未设置为True,那么您要实现的命令必须采用列表形式(因此它将是['explorer','dirname']。如果您不想要,也可以使用shlex。使Shell = True并且不想处理列表。
编辑:啊我想念这个问题。通常你需要一个直接的目录路径,这可能会有所帮助。