我正在尝试将函数的结果写入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
我不完全确定,这是正确的做事方式吗?
答案 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