gpt4 book ai didi

python - 从 python 内部编写 bash 脚本

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:51 24 4
gpt4 key购买 nike

我有一个小的 test.sh 脚本,我从命令行 ./test.sh 运行它会要求我输入我输入的 2 个问题,然后循环直到我 ctrl-c 出来。

我想编写一个可以运行我的 test.sh 的小 python 脚本,并从我在 python 中设置的变量 var1 和 var2 输入脚本问题的输入。

我还想要另一个变量 var3,它循环 x 长并运行我的 test.sh,然后结束它然后根据 var3 的值每 x 分钟重新启动它

我写了这段代码,但它似乎没有在启动后将命令传递到我的 test.sh 中:

import os
os.system('./test.sh arg1')
time.sleep(10)
sh('input answer 1')
time.sleep(5)
sh('input answer 2')

目前我的代码已根据此线程更新为如下所示:

#!/usr/bin/env python

import pexpect
import sys
import os
child = pexpect.spawn ('./test.sh -arg1')
child.expect ('some expected output from the .sh file')
child.expect ('more expected output from the .sh file')
child.expect ('(?i)Enter Username:')
child.sendline ('myusername')
child.expect ('(?i)Enter Password:')
child.sendline ('mypassword')
# sys.stdout.write (child.after)
# sys.stdout.flush()
time.sleep(30)
child.sendcontrol('c')
child.close()
print 'Goodbye'

--已修复-- 现在的问题是我的超时或 sleep 受到干扰,可能是我的 .sh 脚本的输出造成的。当我在超时或 time.sleep 未注释的情况下运行此脚本时,它要么没有影响,要么直接进入我的 child.close() 并结束程序,要么挂断 child.sendline ('mypassword')出于某种原因,我卡在我的 .sh 脚本的密码提示中......也许它并没有真正卡在那里,因为我无法与之交互。 --固定--

一旦我让脚本暂停 30 秒(或 x),那么我剩下要做的就是让整个事情循环 x 次。最后,我需要添加错误检查,因为 .SH 响应不同的文本字符串,这表明我需要立即再次运行脚本。

非常感谢大家的帮助!

最佳答案

使用 pexpect :

import pexpect  # $ pip install pexpect

while var3: # start ./test.sh again
output = pexpect.run('./test.sh arg1',
timeout=x, # terminate child process after x seconds
events={r'(?i)question 1': var1, # provide answers
r'(?i)question 2': var2})

注意:由于缓冲问题,基于subprocess 的解决方案可能会更复杂,并且可能需要额外的ptyselect 模块,example

关于python - 从 python 内部编写 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14024957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com