Как автоматизировать upload_data Google App Engine с --passin и subprocess.Popen?

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

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

Это работает, как и ожидалось, однако, когда я ввожу «--passin», я не могу правильно ввести его в стандартный ввод. Я пробовал следующее:

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 ничего не вводил в подпроцесс, потому что я уже вышел.


person Nicholas Herring    schedule 21.08.2011    source источник
comment
Вы должны опубликовать свое обновление как ответ на свой собственный вопрос, чтобы другие могли извлечь пользу из вашей с трудом завоеванной мудрости.   -  person Nick Johnson    schedule 22.08.2011


Ответы (2)


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

Решение:

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

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

person Nicholas Herring    schedule 28.03.2012

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

person schuppe    schedule 28.03.2012