захват вывода в переменную в python - PullRequest
0 голосов
/ 02 февраля 2020

Это глупый вопрос, но он доставляет мне много хлопот. Я пытаюсь записать вывод в переменную

a='jobid'
p=exec(a)
print(p)
output:None

Вы, ребята, могли бы сказать, почему бы просто не использовать переменную 'a' вместо ее выполнения, а рядом с ней есть каскадная функция. И я не могу использовать переменную «a». И значение «идентификатор работы» в переменной «а» происходит из фрейма данных и должно перехватывать значение, так как «идентификатор работы» является параметром в моем коде. Может кто-нибудь помочь мне?

Я также попробовал следующий код:

a='jobid'
p=exec('print(jobid)')
print(p)

Но это не сработало.

Ответы [ 2 ]

1 голос
/ 02 февраля 2020

Вы можете перенаправить sys.stdout и использовать объект StringIO, чтобы поймать значение:

import sys
from io import StringIO

something = lambda:print('I have been run')
old_stdout = sys.stdout
sys.stdout = catcher = StringIO()
exec('something()')
sys.stdout = old_stdout
print(catcher.get_value())

Или, в целях безопасности, вы можете использовать contextlib.redirect_stdout сделать то же самое:

from contextlib import redirect_stdout
catcher = StringIO()
with redirect_stdout(catcher):
     exec('something()')
print(catcher.getvalue())
0 голосов
/ 03 февраля 2020

Надеюсь, это поможет вам.

Попробуйте следующее:

b='a="jobid"\nprint(a)'
exec(b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...