在Python中,如何以被动方式将值传递给交互式输入?

在Python中,如何以被动方式将值传递给交互式输入?,python,input,Python,Input,我使用一个函数以交互方式从用户那里获取一些输入并返回一些值。我希望在不更改函数的情况下运行该函数,而不必自己键入值,例如从列表中读取。我怎样才能做到这一点 MCVE: def添加: a=输入“第一个数字:” b=输入“第一个数字:” 返回A+b 我希望能够运行magicadd[2,3]之类的程序来获得输出5。如果您的值在任何大小的列表中,那么sum将起作用 def add(A): return sum(A) 如果您的值在任意大小的列表中,那么sum将起作用 def add(A):

我使用一个函数以交互方式从用户那里获取一些输入并返回一些值。我希望在不更改函数的情况下运行该函数,而不必自己键入值,例如从列表中读取。我怎样才能做到这一点

MCVE:

def添加: a=输入“第一个数字:” b=输入“第一个数字:” 返回A+b
我希望能够运行magicadd[2,3]之类的程序来获得输出5。

如果您的值在任何大小的列表中,那么sum将起作用

def add(A):
    return sum(A)

如果您的值在任意大小的列表中,那么sum将起作用

def add(A):
    return sum(A)

假设您使用的是Linux或wsl,您可以通过stdin来传递一些输入。即

$ echo $'1\n3\n' | python scripy.py
应该产生4。如果您有一个具有相同内容的文件,则可以使用cat执行相同的操作

只有在绝对必要的情况下:

python还可以用来模拟stdin。sys.stdin只是StringIO类的一个实例。我们可以用一个StringIO类覆盖默认的sys.stdin,该类包含我们选择的内容

with StringIO(in_string) as f:
    tmp = sys.stdin
    sys.stdin = f
    add()
    sys.stdin = tmp

假设您使用的是Linux或wsl,您可以通过stdin来传递一些输入。即

$ echo $'1\n3\n' | python scripy.py
应该产生4。如果您有一个具有相同内容的文件,则可以使用cat执行相同的操作

只有在绝对必要的情况下:

python还可以用来模拟stdin。sys.stdin只是StringIO类的一个实例。我们可以用一个StringIO类覆盖默认的sys.stdin,该类包含我们选择的内容

with StringIO(in_string) as f:
    tmp = sys.stdin
    sys.stdin = f
    add()
    sys.stdin = tmp

一种选择是进行模拟输入的测试:


如果您试图自动使用某些使用输入的第三方函数,但如果您只是尝试测试它们的函数,那么这是一种相当全面的方法。

一种选择是在模拟输入的情况下进行测试:



如果您试图自动使用某些第三方函数,而这些函数使用的是输入,那么这是一种非常迂回的方法,但是如果您只是尝试测试它们的功能,不错。

您应该编写函数以列表作为参数。我认为只有在运行另一个输入数据的程序时才有可能。您可以使用批处理或shell脚本将数据发送到程序。您可以添加更多上下文说明为什么需要这样做吗?如果可能的话,这似乎是一种需要避免的模式。您应该编写函数以将列表作为参数。我认为只有在运行另一个输入数据的程序时才有可能。您可以使用批处理或shell脚本将数据发送到程序。您可以添加更多上下文说明为什么需要这样做吗?如果可能的话,这似乎是一种需要避免的模式。这很有帮助,但我确实需要在python代码中这样做input@kmi见我看到的例子。环境似乎起了作用。谢谢这很有帮助,但我真的需要在python代码中这样做input@kmi见我看到的例子。环境似乎起了作用。谢谢它可以工作。这非常接近我需要的,但它在@patch line上抱怨:需要一个有效的目标来修补。您提供了:“input”使用“builtins.input”,这将修补您想要的内容。它可能是“内置输入”。我不记得了。嗯,试试@patchbuiltins.input好吗?注:顺便说一句,运行此测试的最简单方法是通过PyTestThank。这就成功了。这非常有效。这与我需要的非常接近,但它在@patch line上抱怨:需要一个有效的目标进行修补。您提供了:“input”使用“builtins.input”,这将修补您想要的内容。它可能是“内置输入”。我不记得了。嗯,试试@patchbuiltins.input好吗?注:顺便说一句,运行此测试的最简单方法是通过PyTestThank。这就成功了。这很好用。