Python 3.2.2 从控制台读取

2 投票
2 回答
3637 浏览
提问于 2025-04-17 05:47

我正在使用Python 3.2.2。用户可以选择在控制台输入一个值,或者如果直接按回车键,就使用默认值。例如,如果用户按下回车键,值就会设置为c:\temp,如下面的代码片段所示:

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

这段代码在Python 2.7中是可以正常工作的,但在Python 3.2.2中就不行了。

在3.2.2版本中,READ的内容保持为空。请问有什么建议可以改进这段代码吗?

2 个回答

1

Python 3 对字符串的处理方式做了一些调整,具体可以查看这篇文档。因此,使用 os.read() 时,它返回的是二进制字符串。

代码需要进行以下修改:

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

在Python 2.7中,os.read这个函数会返回一种叫做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"

撰写回答