我正在编写一个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 ...任何想法如何解决这个问题?
答案 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"])