stdin / stdout C代码的Pythonic替代品

时间:2014-02-02 11:05:33

标签: python

给出的代码是:

#include<stdio.h>
int main()
{
  char ch;
  while((ch=getc(stdin))!=EOF)
    putc(ch,stdout);
  return 0;
}

我试过了:

import sys
ch=sys.stdin.read(1)
while (len(ch)>0):
    sys.stdout.write(ch + '\n')
    ch=sys.stdin.read(1)

实现此代码的更好方法是什么?

2 个答案:

答案 0 :(得分:4)

你的尝试非常接近正确。问题是+ '\n'。您不希望在每个输入字符后写一个换行符。输入中的任何换行都将被读取并写入输出;这可能就是你想要的。

import sys
ch = sys.stdin.read(1)
while (len(ch)>0):
    sys.stdout.write(ch)
    ch = sys.stdin.read(1)

你也可以循环遍历sys.stdin来逐行读取,但是如果你这样做,Python将以块的形式读取输入,并且在你填满一块或输入之前你不会看到任何输出一个EOF:

import sys
for line in sys.stdin:
    sys.stdout.write(line)

我们可以使用sys.stdin.readline来获得更快的输出,iter不使用相同的分块机制:

import sys
for line in iter(sys.stdin.readline, ''):
    sys.stdout.write(line)

此代码使用{{3}}的非常见的2参数形式,它生成一个迭代器,它反复调用作为第一个参数提供的函数来生成值,当函数生成作为第二个参数给出的值时停止。

答案 1 :(得分:3)

由于Python默认将输出缓冲到换行符,因此需要在每个字符后刷新:

import sys

while True:
    try:
        line = raw_input()
    except: break
    for c in line:
        sys.stdout.write(c)
        sys.stdout.flush()
    sys.stdout.write('\n')