BMichell
BMichell

Reputation: 3771

Subprocess doesn't open the correct directory

I'm running a script which prompts the user to select a directory, saves a plot to that directory and then uses subprocess to open that location:

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

When I run the file I select a sub-directory in D:\Documents and the figure save is correct. However the subprocess simply opens D:\Documents as opposed to D:\Documents\XXX.

Ben

Upvotes: 0

Views: 1747

Answers (3)

Holloway
Holloway

Reputation: 7377

You are only passing the string 'dirname' not the variable that you have named dirname in your code. Since you (presumably) don't have a directory called dirname on your system, explorer opens the default (Documents).

You may also have a problem with / vs \ in directory names. As shown in comments, use os.path module to convert to the required one.

You want something like

import os
win_dir = os.path.normpath(dirname)
subprocess.Popen('explorer "%s"' %win_dir)

or

import os
win_dir = os.path.normpath(dirname) 
subprocess.Popen(['explorer', win_dir])

Upvotes: 0

jfs
jfs

Reputation: 414835

To open a directory with the default file explorer:

import webbrowser

webbrowser.open(dirname) #NOTE: no quotes around the name

It might use os.startfile(dirname) on Windows.

If you want to call explorer.exe explicitly:

import subprocess

subprocess.check_call(['explorer', dirname]) #NOTE: no quotes

dirname is a variable. 'dirname' is a string literal that has no relation to the dirname name.

Upvotes: 2

Ari K.
Ari K.

Reputation: 11

Add ,Shell=True after 'explorer dirname' If Shell is not set to True, then the commands you want to implement must be in list form (so it would be ['explorer', ' dirname']. You can also use shlex which helps a lot if you don't want to make Shell = True and don't want to deal with lists.

Edit: Ah I miss read the question. often you need a direct path to the directory, so that may help.

Upvotes: -1

Related Questions