自动输入raw_input

use*_*399 8 python

举个例子,它可能看似不合逻辑.我有一个get_name函数,如下所示,并希望编写一个自动脚本来调用此函数并raw_input自动进入.

def get_name ():
    name = raw_input("Please enter your name : ")
    print "Hi " + name
Run Code Online (Sandbox Code Playgroud)

自动脚本如下所示,我应该添加什么命令来自动输入我的值?

def run ():
    get_name ()
    // what should I add here?
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 6

您可以将您stdin的文件重定向到该文件,然后raw_input()从该文件中读取.

示例 -

def run():
    import sys
    f1 = sys.stdin
    f = open('input.txt','r')
    sys.stdin = f
    get_name()
    f.close()
    sys.stdin = f1
Run Code Online (Sandbox Code Playgroud)

请注意,执行之后 - f = open('input.txt','r')并且sys.stdin = f,raw_input()将从<filename>文件中读取.

完成get_name()调用后,关闭文件并使用恢复stdin sys.stdin = sys.__stdin__,如果要将其恢复为控制台输入,则可以将其还原到f1,这会将其恢复到测试开始之前的状态.

请注意,重定向这样的输入时应该小心.


Mic*_*jer 5

您也可以stdinStringIO(即内存文件)代替实际文件。这样,输入的文本将出现在测试代码中,而不是单独的文本文件中。

基于Anand S Kumar(+1):

def run():
    import sys
    import StringIO
    f1 = sys.stdin
    f = StringIO.StringIO('entered text') # <-- HERE
    sys.stdin = f
    get_name()
    f.close()
    sys.stdin = f1
Run Code Online (Sandbox Code Playgroud)

另外,对于交互式命令行功能/工具的更复杂的测试,您可能需要检查pyexpect软件包。