stdin/sdtout C代码的Pythonic替代方案

stdin/sdtout C代码的Pythonic替代方案,python,Python,所给代码为: #include<stdio.h> int main() { char ch; while((ch=getc(stdin))!=EOF) putc(ch,stdout); return 0; } 有没有更好的方法来实现这段代码 您的尝试非常接近正确。问题是+'\n'。您不希望在每个输入字符后都写换行符。输入中的任何换行符都将被读写到输出中;那可能是你想要的 import sys ch = sys.stdin.read(1) while (len(c

所给代码为:

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

有没有更好的方法来实现这段代码

您的尝试非常接近正确。问题是+'\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)
通过使用,我们可以获得更多的提示输出,而不是使用相同的分块机制:

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

此代码使用不常见的2参数形式,它生成一个迭代器,该迭代器反复调用作为第一个参数提供的函数以生成值,并在函数生成作为第二个参数提供的值时停止。

由于默认情况下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')

我尝试了:导入sys ch=sys.stdin.read1,而lench>0:sys.stdout.writech+'\n'ch=sys.stdin。read1@user3223301你真的认为这是可读的吗?为什么不把它编辑到你的问题中?C缓冲区不是也会输出吗?事实上,我很确定这是行不通的。它会删除所有的换行符,因为原始输入会将它们去掉。编辑后,它会工作,但分别编写和刷新每个字符似乎有点愚蠢,我认为刷新并不能使程序更正确。你确定,这段代码在python 2.7.x上也能工作吗?@user3223301:这就是我运行它的原因。
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')