gpt4 book ai didi

python - 从 shell 程序脚本执行(service ssh start)有效,但是当我从python调用脚本时,它不起作用

转载 作者:行者123 更新时间:2023-12-02 20:41:48 25 4
gpt4 key购买 nike

我有一个Shell脚本,该脚本有时会启动docker容器,然后在其上启动ssh

out=$(docker start $CONTAINER)


if ! [[ $? -eq 0 ]]; then
echo $out
exit 1
else
echo "docker started successfully "
out=$(docker exec -ti $CONTAINER service ssh start)
if ! [[ $out =~ "[ OK ]" ]]; then
echo "SSH failed!"
exit 1

else
echo "SSH running successfully"
fi
fi

这样很好。但是,当我从python脚本内部(通过子进程)调用此shell脚本时,一旦到达“docker exec”部分,python脚本就会停止响应,然后我立即得到一个SIGTERM:fish:Job 2,'python3 start .py&'被信号SIGTERM终止(礼节退出请求)
def runScript(self)
self.p = subprocess.Popen(["./script.sh"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1, universal_newlines=True)
while self.p.poll() is None:
msg = self.p.stdout.readline().strip()
if msg:
print(msg)

self.job = ExecutionThread(target=self.runScript, daemon=True, kwargs=dict(tmpTxt =self.tmpCommandTxt))

由于某些其他原因,我不想直接从python使用docker lib,我希望它在shell脚本中发生。

我还尝试过删除Shell脚本的“docker start”部分(该脚本本身很大)。在这种情况下,它可以正常工作。因此,问题显然出在脚本的docker部分。

最佳答案

问题在于将“i”参数传递给了docker exec。
我没有100%正确的解释,但是显然试图从后台python创建的子进程中获取交互式 session 会很糟糕:)

因此将命令更改为以下命令即可正常工作。

out=$(docker exec -t $CONTAINER service ssh start)

关于python - 从 shell 程序脚本执行(service ssh start)有效,但是当我从python调用脚本时,它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62354882/

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