蟒蛇子进程 git clone

问题描述 投票:1回答:1

我在AWS lambda上使用subprocess(),使用这个层。https:/github.comlambcigit-lambda-layer。

这是代码。

import json
import os

import subprocess

def lambda_handler(event, context):

    os.chdir('/tmp')

    subprocess.Popen(["git", "clone", "https:/github.com/hongmingu/requirements"], shell=True)
    subprocess.Popen(["touch word.txt"], shell=True)

    word = str(subprocess.check_output(["ls"], shell=True))
    return {
        'statusCode': 200,
        'body': json.dumps(word)
    }

并返回。

Response:
{
  "statusCode": 200,
  "body": "\"b'word.txt\\\\n'\""
}

所以有一些问题 subprocess.Popen(["git", "clone", "https:/github.com/hongmingu/requirements"], shell=True)

我检查了一下,有git的 subprocess.check_output(["git --version"], shell=True) 并且效果很好。

如何解决这个问题?

python git aws-lambda subprocess
1个回答
2
投票

有几个问题。

首先,你需要等待 git 进程退出。要做到这一点,必须使用 subprocess.Popen呼叫 .wait() 在被退回的 Popen 对象。但是,我建议使用 subprocess.check_call() 而不是自动等待进程退出,并在进程返回非零退出状态时引发错误。

其次,没有必要指定 shell=True 因为你没有使用任何shell扩展或内置。事实上,当你在使用 shell=True第一个项目是命令字符串,其余项目是 shell 本身的参数,而不是命令。

最后,你的 GitHub URL 中少了一个斜杠。

试试这个。

subprocess.check_call(["git", "clone", "https://github.com/hongmingu/requirements"])
© www.soinside.com 2019 - 2024. All rights reserved.