Как автоматизировать загрузку_данных Google App Engine с помощью --passin и subprocess.Popen? - PullRequest
1 голос
/ 22 августа 2011

Вот что у меня есть:

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 ]

1 голос
/ 28 марта 2012

После публикации и прочтения в другом формате я понял, что не жду процесса.

Решение:

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

Это прекрасно работает. Я предполагаю, что поскольку я не ждал, Python не вводил ничего в подпроцесс, потому что я уже вышел.

0 голосов
/ 29 марта 2012

Если вы обнаружите, что добавляете код для обработки аутентификации, ошибок и т. Д., Вы можете также рассмотреть возможность использования gaedriver в качестве библиотеки для использования appcfg: http://code.google.com/p/gaedriver/

...