2011-11-07 109 views
1

我正在使用Python 3.2.2。用戶可以選擇在控制檯上輸入數值,或者如果他只是按ENTER鍵,則可以使用默認值。例如如果用戶點擊回車鍵,值設置到C:\ TEMP如下圖所示的代碼片段:Python 3.2.2從控制檯讀取

READ=os.read(0,100) 
if READ == "\n" : 
    READ="c:\\temp" 

該代碼使用Python 2.7版的工作,但它不會對蟒蛇3.2.2工作。

在3.2.2中,READ保持空白。 任何建議,請改善此代碼?

+0

可能有助於知道爲什麼它不工作... – CharlesB

+2

爲什麼'os.read(0,100)',而不僅僅是'輸入()'? –

+2

在這種情況下,你應該有能力解決這個問題。首先,打印(repr(READ))'。 –

回答

7

函數os.read在Python 2.7中返回class str,但在python 3.2中返回class bytes。所以在python 3.2中,if READ == "\n": READ="C:\\temp"將會是從來沒有True。你可以改變這樣的:

if str(READ,"ascii") == os.linesep: READ = "C:\\temp" 

也許更確切地說:

import os,sys 
READ = os.read(0,100) 
if str(READ,sys.stdin.encoding) == os.linesep: 
    READ = "C:\\temp" 
+0

謝謝。我將它改爲'os.linesep'。 – Vivodo

+1

非常感謝。 「if str(READ,」ascii「)== os.linesep」工作。 – ShandM

1

Python 3中取得​​,所以os.read()回報二進制字符串。

代碼應該是固定

if READ == b'\n' : 
    READ="c:\\temp"