发出通过管道传递给shell脚本的终端命令

时间:2013-02-12 01:30:47

标签: python bash shell subprocess pipe

我有一个似乎是一个简单的用例:我启动一个脚本(python或bash),它从命令提示符运行模拟器,然后模拟器接受命令,直到我键入ctrl-c或退出。我想从shell做同样的事情,下面的代码不起作用。我想要做的是测试自动化,所以我想从命令shell直接向应用程序发出命令。在python中,我有以下内容:

    import os 
    import subprocess

    command = ['/usr/local/bin/YCTV-SIM.sh', '-Latest'] #emulator for yahoo widgets
    process = subprocess.Popen( command, shell=True, stdin=subprocess.PIPE )

    time.sleep(12) #wait for launch to finish
    print '/widgets 1' #first command to issue
    print '/key enter' #second command to issue

    process.wait()

如你所见,这是一些非常简单的东西。当从命令shell启动'YCTV-SIM.sh'时,我进入输入模式,我的密钥条目被发送到应用程序shell(YCTV-SIM.sh读取原始输入),所以理想情况下,我将能够将文本直接传递给此应用程序shell。到目前为止,没有任何事情发生;测试输出到控制台窗口但应用程序不响应我尝试发出的命令。我正在使用python 2.6.3,如果这很重要,但不需要Python ..

语言在这一点上并不重要,所以PERL,Python,Bash,TCL ......无论你能提出什么建议都可以提供帮助。

1 个答案:

答案 0 :(得分:1)

您需要重定向子进程的stdin并写入其中。参见例如subprocess.Popen.communicate