【问题标题】:python 3.x input in a different scriptpython 3.x 在不同的脚本中输入
【发布时间】:2017-12-05 14:06:09
【问题描述】:

我在尝试创建一个调用另一个 py 脚本并向其输入一些 int 的 py 脚本时发现了一些问题。我解释得更好:

我的第一个脚本是 simpleScript.py

def addition ( a , b ) :
    c = a + b 
    return c
x = int ( input ( 'input a int' ) )
y = int ( input ( 'input a int' ) )
summ = addition ( x , y )

在我的第二个脚本 tester.py 上,我想这样做:

call simpleScript.py ;
input 4 as x ;
input 8 as y ;
run simpleScript.py using those two input ;

还有更多的东西。问题是我真的找不到 ho 来正确输入它。一旦我得到它,我就可以完成剩下的所有事情。

提前致谢。

【问题讨论】:

  • 传递参数怎么样?
  • 如果您实际上不希望用户输入值,您使用input 是否有原因?只是想澄清一下,第二个脚本是否用于测试目的,并且您想将输入模拟为第一个脚本的单元测试?如果是这样,这将有所帮助:stackoverflow.com/questions/46222661/… - 您想查看模拟 builtins.input 以获得虚假的返回值(人类会输入的数字)。
  • @Bilkokuya 是的,我正在编写一个脚本来测试我的第一个脚本,模拟人类可以输入的所有可能输入。
  • 太好了,我链接的解决方案应该对您有很大帮助。我将把它标记为重复 - 不过不要认为这是一件坏事,它希望能在上次被问到时给你答案:)

标签: python python-3.x input


【解决方案1】:

回答以帮助 OP,因为这与链接的副本之间略有不同(尽管我仍然建议这是一个应该关闭的副本)。此处的输入正在模块范围内运行 - 因此将在首次加载时执行。即simpleScript.py 将在import 首次调用它时要求输入。

要在测试场景中执行此操作,我首先建议对其进行更改,以便 simpleScript.py 提供一个可以运行的函数。这样 - 可以使用与副本提供的相同解决方案。

但是对于simpleScript.py 确实直接执行代码的这种特定情况,我们可以使用下面的测试脚本来测试功能:

from unittest.mock import patch
from io import StringIO

@patch("sys.stdin", StringIO("1\n4"))
def test_simpleScript():
    import simpleScript

test_simpleScript()

这通过模拟 stdin(命令行输入)返回 1,然后是新行 4。由于 inputstdin 一起使用,这将在第一次调用 input 时返回 1,然后4 下次通话。

当我们import simpleScript 模块时——其中的所有代码都会被执行。由于我们所做的上述模拟补丁,在此期间对input 的任何调用都将读取我们提供的数字。由于模块仅在第一次加载时执行 - 如果您一个接一个地尝试多个测试,您可能会遇到问题。如果是这种情况,请参阅此处了解如何强制模块重新加载:How do I unload (reload) a Python module?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-07
    • 2020-04-20
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2013-10-02
    • 2022-01-04
    • 2021-09-08
    相关资源
    最近更新 更多