#python-3.x #exception #command-prompt
Вопрос:
Этот код запускает команды python в командной строке и сохраняет вывод в виде строки:
output = subprocess.run(
["python3", "-c", "print("hello")njj" ], stdout=subprocess.PIPE, timeout=3)
output = output.stdout.decode('utf-8')
print(output)
Результатом будет:
hello
В моем собственном cmd я получаю исключение:
Traceback (most recent call last):
File "<string>", line 4, in <module>
NameError: name 'jj' is not defined
Я попытался написать попытку и исключение, но это тоже не сработает.
Я бы хотел, чтобы на выходе также была обнаружена ошибка, она будет выглядеть так:
hello
Traceback (most recent call last):
File "<string>", line 4, in <module>
NameError: name 'jj' is not defined
Комментарии:
1. Почему вы запускаете новый интерпретатор python изнутри python с помощью
subprocess
? Есть гораздо более приятные способы запуска кода python изнутри python…2. Например…? Я не хочу открывать новый файл
3. Почему бы просто не поместить «сломанную» строку печати в блок «попытка/исключение»? Зачем оборачивать его в новый интерпретатор python? вероятно, вам нужно объяснить, чего вы хотите достичь, так как это похоже на проблему X/Y.
4. В моей программе я не знаю фактического кода, я могу получить его только через строку
Ответ №1:
Возможно, это не самое практичное, но именно этим я и занялся:
txt_str = 'print("hello")njj'.split("n")
command = "t".join([txt n for txt in txt_str])
command = "try:n"
"t%sn"
"except Exception as e:n"
"tprint(e)" % (command, )
output = subprocess.run(
["python3", "-c", command], stdout=subprocess.PIPE, timeout=3)
output = output.stdout.decode('utf-8')