2012-01-19 40 views
0
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() 

当我使用IDLE运行正常运行这段代码创建,但是当我使用cx_freeze然后创建这条巨蟒文件的EXE if和elif的条件是不工作的“r”和' w'分别。对于任何输入,它总是进入else语句。EXE使用cx_freeze不能正常工作

我使用python 3.2和cx_freeze 3.2

+1

在'input()'后面加上'print(repr(use))',这样你就可以看到'use'的* actual *内容。 –

回答

2

只是一个简单的测试,我这样做:

use = input("test input here: ") 

for i in use: 
    print(ord(i)) 

的结果,如果你输入“你好”,是ASCII字符代码你好,再加上“13”。这是\r,返回字符,它被添加到你的字符串中。这在Linux下不会发生,并且是在Windows上换行的结果是\r\n而不是仅仅\n

你的解决办法是做类似:

use = input("test input: ").strip("\r") 

strip()是一个字符串对象方法会移除结束字符和字符串的开始。

注:

  1. 在上面的例子中使用的ord()可能不是最好的做法 - 请参阅Unicode。
  2. 如果你写的图形用户界面和使用cx_freeze,不要使用print()input() - Windows上的标准输入/输出句柄不存在GUI应用在所有。那让cx_freeze + gui代码绊了我一会儿。当你到达那里时,请注意。
+0

它使用strip()很好地工作。 非常感谢宝贵的注意事项。 –