ValueError при разборе кортежа? - PullRequest
0 голосов
/ 28 мая 2020

Мой сценарий -

import subprocess
z = subprocess.check_output(['python3', 'test1.py'],universal_newlines=True)
mas = z
mas = dict(mas)
e = mas.get('email')
print(e)

Я получаю сообщение об ошибке-

ValueError: dictionary update sequence element #0 has length 1; 2 is required

Но когда я запускаю-

mas = {'email': 'something@gmail.com'}
mas = dict(mas)
e = mas.get('email')
print(e)

я получаю желаемый результат, т.е. something@gmail.com. Кроме того, вывод test1.py равен {'email': 'something@gmail.com'}

1 Ответ

0 голосов
/ 28 мая 2020

check_output() возвращает результат процесса в виде строки. Если вы знаете, что он представляет собой словарь Python, вы можете проанализировать его, используя ast.literal_eval():

import ast
import subprocess

z = subprocess.check_output(['python3', 'test1.py'], universal_newlines=True)
mas = ast.literal_eval(z)

Тем не менее, я бы предпочел импортировать файл python как модуль и использовать функции в нем напрямую.

...