[Tutor] Verifying My Troublesome Linkage Claim between Python and Win7

Dave Angel davea at ieee.org
Wed Feb 24 02:35:39 CET 2010


Wayne Watson wrote:
> A few days ago I posted a message titled ""Two" Card Monty. The 
> problem I mentioned looks legitimate, and remains puzzling. I've 
> probed this in a newsgroup, and no one has an explanation that fits.
>
> My claim is that if one creates a program in a folder that reads a 
> file in the folder it and then copies it to another folder, it will 
> read  the data file in the first folder, and not a changed file in the 
> new folder. I'd appreciate it if some w7 users could try the program 
> below, and let me know what they find.  I'm using IDLE in Win7 with Py 
> 2.5.
>
> My experience is that if one checks the properties of the copied file, 
> it will point to the original py file and execute it and not the copy. 
> If win7 is the culprit, I would think this is a somewhat  serious 
> problem. It may be the sample program is not representative of the 
> larger program that has me stuck. If necessary I can provide it. It 
> uses common modules. (Could this be something like the namespace usage 
> of variables that share a common value?)
>
> # Test program. Examine strange link in Python under Win7
> # when copying py file to another folder.
> # Call the program vefifywin7.py
> # To verify my situation use IDLE, save and run this program there.
> # Put this program into a folder along with a data file
> # called verify.txt. Create a single text line with a few characters 
> in it
> # Run this program and note the output
> # Copy the program and txt file to another folder
> # Change the contents of the txt file
> # Run it again, and see if the output is the same as in the other folder
> track_file = open("verify.txt")
> aline = track_file.readline();
> print aline
> track_file.close()
>
I find your English is very confusing.  Instead of using so many 
pronouns with confusing antecedents, try being explicit.

 >My claim is that if one creates a program in a folder that reads a 
file in the folder

Why not say that you created a program and a data file in the same 
folder, and had the program read the data file?

 >...in the folder it and then copies it to another folder

That first 'it' makes no sense, and the second 'it' probably is meant to 
be "them".  And who is it that does this copying?  And using what method?

 > ... it will read  the data file in the first folder

Who will read the data file?  The first program, the second, or maybe 
the operator?

About now, I have to give up.  I'm guessing that the last four lines of 
your message were intended to be the entire program, and that that same 
program is stored in two different folders, along with data files having 
the same name but different first lines.  When you run one of these 
programs it prints the wrong version of the line.

You have lots of variables here, Python version, program contents, Idle, 
Windows version.  Windows 7 doesn't do any mysterious "linking," so I'd 
stop making that your working hypothesis.  Your problem is most likely 
the value of current directory ( os.getcwd() ).  And that's set 
according to at least three different rules, depending on what program 
launches Python.  If you insist on using Idle to launch it, then you'll 
have to convince someone who uses Idle to tell you its quirks.   Most 
likely it has a separate menu for the starting directory than for the 
script name & location.  But if you're willing to use the command line, 
then I could probably help, once you get a clear statement of the 
problem.  By default, CMD.EXE uses the current directory as part of its 
prompt, and that's the current directory Python will start in.

But the first things to do are probably to print out the value of  
os.getcwd(), and to add a slightly different print in each version of 
the program so you know which one is running.

Incidentally, I'd avoid ever opening a data file in "the current 
directory."  If I felt it important to use the current directory as an 
implied parameter to the program, I'd save it in a string, and build the 
full path to the desired file using  os.path.join() or equivalent.

DaveA



More information about the Tutor mailing list