2012-01-19 83 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()很好地工作。 非常感謝寶貴的注意事項。 –