将函数结果写入stdin

时间:2013-02-24 19:16:23

标签: python python-3.x stdin

我正在尝试将函数的结果写入stdin。

这是代码:

def testy():
    return 'Testy !'

import sys
sys.stdin.write(testy())

我得到的错误是:

Traceback (most recent call last):
  File "stdin_test2.py", line 7, in <module>
    sys.stdin.write(testy())
io.UnsupportedOperation: not writable

我不完全确定,这是正确的做事方式吗?

3 个答案:

答案 0 :(得分:12)

您可以使用类似文件的对象模拟stdin吗?

import sys
import StringIO

oldstdin = sys.stdin
sys.stdin = StringIO.StringIO('asdlkj')

print raw_input('.')       #  .asdlkj

答案 1 :(得分:0)

stdin是输入流,而不是输出流。你不能写信给它。

您可能可以做的是使用os.pipe创建管道,使用os.fdopen将可读端转换为文件对象,并用它替换stdin,然后写入可写的结尾。

r, w = os.pipe()
new_stdin = os.fdopen(r, 'r')
old_stdin, sys.stdin = sys.stdin, new_stdin
但是,我看不出结局很好。只重写使用input的应用程序部分会更容易,也更不容易出错。

答案 2 :(得分:0)

我正在自己搜索该怎么做,并弄清楚了。对于我的情况,我从hackerrank.com上获取了一些示例输入,并将其放入文件中,然后希望能够将所述文件用作我的stdin,这样我就可以编写一个可以轻松复制/粘贴到他们的IDE中。我将2个python文件设为可执行文件,然后添加了shebang。第一个读取我的文件并写入stdout

#!/Users/ryandines/.local/share/virtualenvs/PythonPractice-U9gvG0nO/bin/python
# my_input.py
import sys

def read_input():
    lines = [line.rstrip('\n') for line in open('/Users/ryandines/Projects/PythonPractice/swfdump')]
    for my_line in lines:
        sys.stdout.write(my_line)
        sys.stdout.write("\n")

read_input()

第二个文件是我为解决编程难题而编写的代码。这是我的:

#!/Users/ryandines/.local/share/virtualenvs/PythonPractice-U9gvG0nO/bin/python
def zip_stuff():

    n, x = map(int, input().split(' '))
    sheet = []

    for _ in range(x):
        sheet.append( map(float, input().split(' ')) )

    for i in zip(*sheet): 
        print( sum(i)/len(i) )

zip_stuff()

然后,我使用操作系统的pipe命令提供STDIN的缓冲。就像hackerrank.com一样工作,因此我可以轻松地剪切/粘贴示例输入以及相应的代码,而无需进行任何更改。这样称呼它:./my_input.py | ./zip_stuff.py