如何运行shell脚本而无需按Enter / confirm s.th.其间

时间:2014-11-26 09:57:20

标签: python linux shell

我正在编写一个shell脚本,它与许多python脚本连接。在其中一个Python脚本中,我正在调用grass而不是明确地启动它。当我运行我的shell脚本时,我必须在我调用grass的地方点击Enter(这是我从使用grass page的官方获得的代码):

startcmd = grass7bin + ' -c ' + file_in2 + ' -e ' + location_path 
print startcmd
p = subprocess.Popen(startcmd, shell=True, 
                     stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
 if p.returncode != 0:
    print >>sys.stderr, 'ERROR: %s' % err
    print >>sys.stderr, 'ERROR: Cannot generate location (%s)' % startcmd
    sys.exit(-1)
else:
    print 'Created location %s' % location_path
gsetup.init(gisbase, gisdb, location, mapset)

我的问题是我希望这个过程自动运行,而不必每次都按下输入! 我已经尝试了很多选项,比如pexpect,uinput(由于模块问题,效果不好)。我知道在Windows中你有msvcrt模块,但我正在使用linux ...任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

使用pexpect库获取 expect functionnality。

以下是与要求用户输入密码的应用程序进行交互的示例:

child = pexpect.spawn('your command')
child.expect('Enter password:')
child.sendline('your password')
child.expect(pexpect.EOF, timeout=None)
cmd_show_data =  child.before
cmd_output = cmd_show_data.split('\r\n')
for data in cmd_output:
    print data

答案 1 :(得分:0)

我终于找到了一种简单快捷的模拟按键的方法:

只需安装xdotool,然后使用以下代码进行模拟,例如输入键:

import subprocess
subprocess.call(["xdotool","key","Return"])