【问题标题】:How can I set an "input" in a Python function automatically?如何自动在 Python 函数中设置“输入”?
【发布时间】:2018-03-28 07:24:10
【问题描述】:

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

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

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

重要编辑:非常重要的是要注意我无法更改功能。事物必须作为标准输入输入

【问题讨论】:

  • 将值作为参数传递给函数?这有点取决于你用它做什么。
  • 只需让函数返回您手动输入的值并跳过对input的调用
  • 我刚刚对其进行了编辑以指定我无法更改函数的内部结构。它是如何工作的
  • 将文本放入文件并调用脚本重定向来自该文件的输入。
  • 正要和@kindall 说同样的话。这是保持功能不变的最简单方法。

标签: python python-3.x input automation


【解决方案1】:

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

import sys
from io import StringIO

sys.stdin = StringIO('test')

那么每次调用input()都会得到字符串流上的值。

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

【讨论】:

    【解决方案2】:

    我高度,高度建议您实现一个上下文管理器,并在您想要执行此操作时严格使用此上下文管理器。所以,像:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2015-08-07
      相关资源
      最近更新 更多