子流程不会打开正确的目录

时间:2015-06-30 09:46:44

标签: python subprocess

我正在运行一个脚本,提示用户选择目录,将绘图保存到该目录,然后使用子流程打开该位置:

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。

3 个答案:

答案 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并且不想处理列表。

编辑:啊我想念这个问题。通常你需要一个直接的目录路径,这可能会有所帮助。