Reputation: 2691
I am trying to write a Python script that can move and copy files on a remote Linux server. However, I can't assume that everyone running the script (on Windows) will have mapped this server to the same letter. Rather than prompting users for the correct letter, I want to simply access the server by its network URL, the one that the drive letter is mapped to. So, for instance, if I have mapped the server's URL
\\name-of-machine.site.company.com
To be drive S:\, I want to access, say, the file S:\var\SomeFile.txt in a drive-letter agnostic manner. I have looked around and the general recommendation seems to be to use UNC notation:
f = open(r"\\name-of-machine.site.company.com\var\SomeFile.txt", "w")
But if I try this, an IOError saying there is no such file or directory. If I try using the server's IP address instead (not the real address, but similar):
f = open(r"\\10.1.123.149\var\SomeFile.txt", "w")
I get, after a long pause, an IO Error: "invalid mode ('w') or filename". Why are these notations not working, and how can I access this server (ideally as if it were a local drive) by its URL?
Upvotes: 8
Views: 35503
Reputation: 123
Easy solution is to use forward slashes to specify the Universal Name Convention (UNC):
//HOST/share/path/to/file
Found this solution in another thread and felt it would be relevant here. See original thread below:
Using Python, how can I access a shared folder on windows network?
Upvotes: 7
Reputation: 14261
Not a very elegant solution, but you could just try all the drives?
From here:
import win32api
drives = win32api.GetLogicalDriveStrings()
drives = drives.split('\000')[:-1]
print drives
Then you could use os.path.exists()
on every drive:\var\SomeFile.txt until you find the right one.
Upvotes: 5
Reputation: 69051
Try using the short name instead of the fully qualified name. In you example that would be \\name-of-machine\var\SomeFile.txt
.
Edit:
Okay, now I feel like a dummy -- hopefully you'll feel like one with me! ;)
The machine name is name-of-machine.site.company.com
, and the folder and file name is \var\SomeFile.txt
-- what is the share name? In other words, your path should be something like:
\\name-of-machine.site.company.com\share_name\var\SomeFile.txt
Upvotes: 0
Reputation: 4180
If you can reserve a drive letter for this task, and you have the privileges then you can run "net use ..." from python and then use that fixed drive letter to read/write files.
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/net_use.mspx?mfr=true
Upvotes: 0