如何使用--passin和subprocess.Popen自动化Google App Engine upload_data?

时间:2011-08-21 20:50:10

标签: python google-app-engine process stdin bulkloader

这就是我所拥有的:

process = subprocess.Popen(["cmd.exe",
                            "/c"
                            "appcfg.py",
                            "upload_data",
                            "--config_file=..\\bulkloader.yaml",
                            "--filename=" + generateXmlFilename(kind),
                            "--kind=" + kind,
                            "--url=" + getTargetGaeUrl(),
                            "--application=" + getTargetGaeApplication(),
                            "--email=example@gmail.com",
                            "../"])

然而,当我介绍" - passin"我似乎无法正确地将它变成stdin。我尝试过以下方法:

file = open("upload.pass")
process = subprocess.Popen([..., "--passin"], stdin=file)

以及

process.stdin.write("myPassword")

我甚至尝试过(在黑暗中拍摄)

process = subprocess.Popen([..., "--passin", "< upload.pass"])

您可能已经注意到我正在尝试在Windows 7计算机上执行此操作。

这可能吗?

更新

发布此内容并以不同的格式阅读后,我意识到我并没有等待这个过程。

解决方案是:

file = open("upload.pass")
process = subprocess.Popen([..., "--passin"], stdin=file)
process.wait()

完美无缺。我假设因为我没有等到python没有注入任何东西到子进程中因为我已经退出了。

2 个答案:

答案 0 :(得分:1)

在发布并以不同格式阅读后,我意识到我没有等待这个过程。

解决方案是:

file = open("upload.pass")
process = subprocess.Popen([..., "--passin"], stdin=file)
process.wait()

完美无缺。我假设因为我没有等待python没有在子进程中注入任何东西,因为我已经退出了。

答案 1 :(得分:0)

如果您发现自己添加代码来处理身份验证,错误等,您可能还需要将gaedriver视为使用appcfg的库: http://code.google.com/p/gaedriver/