子进程没有打开正确的目录

Subprocess doesn't open the correct directory

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

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')

当我运行文件我select在D:\Documents的一个子目录下,图形保存是正确的。然而,子进程只是打开 D:\Documents 而不是 D:\Documents\XXX.

添加 ,Shell=True 在 'explorer dirname' 之后 如果 Shell 没有设置为 True,那么你要执行的命令必须是列表形式(所以它会是 ['explorer', 'dirname']。你也可以使用 shlex 这有很大帮助如果您不想 Shell = True 并且不想处理列表。

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

您只传递字符串 'dirname' 而不是您在代码中命名为 dirname 的变量。由于您(大概)在您的系统上没有名为 dirname 的目录,因此资源管理器将打开默认目录(文档)。

您可能还对目录名称中的 / 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])

使用默认文件资源管理器打开目录:

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 名称无关的字符串文字。