Просмотрев документацию по imapsync, я нашел рекомендацию заключать пароли в двойные кавычки в одинарные кавычки, чтобы избежать распространенных проблем .
Поскольку вы уже начинаете строку с двойных кавычек, вы должны избегать двойных кавычек вокруг пароля с обратной косой чертой \"
.
Есть также две вещи, которые вы можете сделать, чтобы сделать ваш код еще лучше.
Во-первых, вы можете использовать синтаксис .format
для форматирования строки вместо старого синтаксиса %
.
Второй заменить os.system
на subprocess.Popen
. Это позволяет вам разбить командную строку на список всех аргументов, что выглядит более понятным.
Ваш новый код будет выглядеть как
import subprocess
args = [
"imapsync",
"--host1",
fromHost,
"--user1",
emails,
"--password1",
"'\"{}\"'".format(passwords),
"--host2",
toHost,
"--user2",
emails,
"--password2",
"'\"{}\"'".format(passwords),
"--ssl1",
"--no-modulesversion",
"--ssl2"
]
p = subprocess.Popen(args, stdout=subprocess.PIPE)
output = p.communicate()[0]
print(output)
В этом примере Popen.communicate
используется для сбора выходных данных команды imapsync в виде строки.
Метод communicate
возвращает кортеж с выходами подпроцесса в потоки stdout
и stderr
.
Если вы также хотите прочитать вывод в stderr
из подпроцесса, измените код следующим образом:
p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, errors = p.communicate()
print(output)
print(errors)