Как вы успешно вызываете gsutil rsync из скрипта Python? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь выполнить следующую строку

gsutil -m rsync s3://input gs://output

в python.При запуске этой строки в терминале оболочки она работает нормально.Однако я пытаюсь запустить это в скрипте Python, используя следующую строку.

subprocess.Popen(["gsutil", "-m", "rsync", "s3://input", "gs://output"])

Однако он просто висит навсегда.Он выводит следующее:

Building synchronization state...
Starting synchronization...

Команда bash успешно печатает:

Building synchronization state...
Starting synchronization...
Copying s3://input/0000
[0/1 files][  1.0 MiB/ 5.1 MiB]   (number here)% Done

, и файл отображается в моей корзине GS

1 Ответ

0 голосов
/ 16 октября 2018

Я предполагаю, что это потому, что последние две строки, вероятно, записываются в stderr вместо stdout.Можете ли вы попробовать использовать вызов Popen в качестве менеджера контекста, а затем вызвать communicate() для чтения из выходных потоков?

proc = subprocess.Popen(["gsutil", "-m", "rsync", "s3://input", "gs://output"])
try:
    outs, errs = proc.communicate(timeout=15)
    # now you can do something with the text in outs and errs
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...