【问题标题】:How to assign a specific value to sys.stdin?如何为 sys.stdin 分配特定值?
【发布时间】:2019-03-02 23:33:22
【问题描述】:

我正在使用以下代码:

#!/usr/bin/env python

import sys
from io import StringIO

#data = sys.stdin.readlines()
sys.stdin = """
hello I feel good
how are you?
where have you been?
"""
for line in sys.stdin:
    print line

当我运行上述代码时,打印行打印出分配给sys.stdin 的文本的每个字符。它每行打印一个字符:

h
e
l
l
o

I

....truncated

我正在尝试使输出与存储在 sys.stdin 中的一样,它应该如下所示:

hello I feel good
how are you?
where have you been?

【问题讨论】:

  • 将字符串分配给sys.stdin 是完全疯狂的。您这样做破坏了 Python,因为它希望该名称引用一个类文件对象,它可以在该对象上调用诸如.read().readline() 之类的方法。如果你想一次用一行对你的字符串做一些事情,比如for line in myString.splitlines():——不需要在这个过程中搞砸sys模块。

标签: python stdin python-2.x


【解决方案1】:

这似乎有效:

from io import StringIO
import sys

data = u"""\
hello I feel good
how are you?
where have you been?
"""

sys.stdin = StringIO(data)

for line in sys.stdin:
    print line.rstrip()

输出:

hello I feel good
how are you?
where have you been?

【讨论】:

  • 假设data的内容是一个环境变量。如何将其内容存储在数据中。我得到的最接近的是print(os.environ['EvanT']),但是当我将它放入数据中时,它只会打印实际文本print(os.environ['EvanT'])。不是EvanT 变量的内容。
  • StringIO(os.environ['EvanT'] + '\n') 之类的东西应该可以工作。
  • 我收到以下错误:TypeError: initial_value must be unicode or None, not str。我该如何解决?
  • StringIO(os.environ['EvanT'] + u'\n')
【解决方案2】:

dabba.txt 文件内容:

hello I feel good
how are you?
where have you been?

这是del.py文件中的代码

import sys
datq=sys.stdin.readlines()
for line in datq:
    print(line)

从 ubuntu 18.04 的命令行:

cat dabba.txt | python del.py 

以上代码的输出是:

hello I feel good

how are you?

where have you been?

【讨论】:

  • 为什么要导入 StringIO?
  • @KirkStrauser 抱歉复制粘贴问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多