如何自动在Python函数中设置“输入”?

时间:2017-10-16 17:34:29

标签: python python-3.x input automation

所以,如果上面的问题没有任何意义,我有一个Python函数(不是由我编写,但我必须多次运行),需要使用“输入”函数。即。

def foo():
    x = input()
    ~~Do stuff~~
    return ~~some relevant variable~~

但我不想每次都输入输入。 “自动”输入输入的最佳方法是什么,以便我不必连续输入值?

重要编辑:非常重要的是要注意我无法更改功能。该东西必须作为STDIN输入输入

2 个答案:

答案 0 :(得分:4)

您可以通过执行与此类似的操作来更改字符串流或文件的标准输入:

import sys
from io import StringIO

sys.stdin = StringIO('test')

然后每次调用input()都会获得字符串流的值。

编辑:然后,您可以读取文件并每次更新sys.stdin的值,每行更新一次。

答案 1 :(得分:1)

我非常高兴,高度建议你实现一个上下文管理器,并在你想要的时候严格使用这个上下文管理器。所以,像:

import sys

class as_stdin:
    def __init__(self, buffer):
        self.buffer = buffer
        self.original_stdin = sys.stdin
    def __enter__(self):
        sys.stdin = self.buffer
    def __exit__(self, *exc):
        sys.stdin = self.original_stdin

然后你可以用更加严格控制的方式重定向你的标准输入:

>>> import io
>>> from redirect import as_stdin
>>> def echo():
...     print(input())
...
>>> with as_stdin(io.StringIO('hello, world')):
...     echo()
...
hello, world
>>> x = input()
hello, x
>>>
>>> print(x)
hello, x