问题
use=input('what do you wanna do \n1.press w to create a new file\n2.press r to read a file:\n')
if use=='r':
read()
elif use=='w':
write()
else :
print('OOPS! you enter a wrong input\n')
user()
when i run this code using IDLE it runs properly but when i created a exe of this python file using cx_freeze then the if and elif conditions are not working for 'r' and 'w' respectively. for any input it always goes to the else statement.
I am using python 3.2 and cx_freeze 3.2
回答1:
Just for a quick test, I did this:
use = input("test input here: ")
for i in use:
print(ord(i))
The result, if you type in "hello", is the ascii character codes for hello, plus "13". This is \r
, the return character, which is being added to your string. This doesn't happen under Linux and is the result of the fact on Windows a newline is \r\n
as opposed to just \n
.
The workaround for you would be to do something like:
use = input("test input: ").strip("\r")
strip()
is a string object method that'll remove characters from the end and beginnings of strings.
Notes:
- The use of
ord()
in the above example is probably not best practise - see Unicode. - If you ever write GUIs and use cx_freeze, don't use
print()
orinput()
- on Windows the standard input/output handles don't exist for GUI apps at all. That tripped me up for a while with cx_freeze + gui code. Just a note for when you get there.
来源:https://stackoverflow.com/questions/8935043/exe-created-using-cx-freeze-not-working-properly