子进程没有打开正确的目录
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
名称无关的字符串文字。
我正在 运行 编写一个脚本,提示用户进入 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
名称无关的字符串文字。