10

関数の結果を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

完全にはわかりませんが、これは正しいやり方ですか?

4

4 に答える 4

23

stdinファイルのようなオブジェクトでモックできますか?

import sys
import StringIO

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

print raw_input('.')       #  .asdlkj
于 2013-02-24T19:27:08.110 に答える
1

Linuxでは可能です:

import fcntl, termios
import os
tty_path = '/proc/{}/fd/0'.format(os.getpid())

with open(tty_path, 'w') as tty_fd:
        for b in 'Testy !\n':
            fcntl.ioctl(tty_fd, termios.TIOCSTI,b)
# input()

于 2021-12-09T07:00:01.287 に答える
0

stdin出力ストリームではなく、入力ストリームです。書き込みはできません。

おそらくできることは、を使用してパイプを作成し、を使用しos.pipeて読み取り可能な端をファイルオブジェクトに変換し、os.fdopenstdinをそれに置き換えてから、書き込み可能な端に書き込むことです。

r, w = os.pipe()
new_stdin = os.fdopen(r, 'r')
old_stdin, sys.stdin = sys.stdin, new_stdin

結末がよく見えないけど。を使用しているアプリケーションの部分を書き直すだけの方が簡単で、エラーが発生しにくくなりますinput

于 2013-02-24T19:25:50.387 に答える