2014-12-02 2 views
3

Запустите скрипт python изнутри python, а также поймайте исключение.Запустите скрипт python изнутри python, а также поймайте исключение

File: test1.py 

try: 
    a = 1/0 
except: 
    raise 

File: test2.py 

import subprocess 
subprocess.call('python test.py', shell=True) 

Как запустить test1.py, а также уловить ZeroDivisionError в test2.py?

+0

Есть ли причина, по которой вы не можете просто импортировать test1? – monostop

+0

test1 - автономный скрипт, который запускается как задание cron с определенными аргументами. Поэтому я хотел запустить скрипт с системными аргументами, не создавая сценарий модуля. – dumper

ответ

0

Есть ли конкретная причина, по которой вы используете подпроцесс? я бы сделал это просто так

test1.py

def test 
    try: 
     a = 1/0 
    except: 
     raise 

test2.py

import test1 

try: 
    test1.test() 
except 
    whateveryouwannado 
0

Используйте try except и использовать function вызов будет лучше,

2

You может достичь этого с помощью exec:

with open('script.py') as f: 
    script = f.read() 
    try: 
     exec(script) 
    except ZeroDivisionError as e: 
     print('yay!', e) 
+0

Это отлично работает. Но как насчет того, что вы хотите выполнить скрипт perl внутри python. – dumper

+0

@dumper Я не думаю, что вы можете поймать исключение Perl из Python. Как правило, языки не имеют прямого взаимодействия. Вы должны выполнить не-Python-код в качестве процесса и проверить его возвращаемое значение, например. используя ['subprocess.check_call'] (https://docs.python.org/2/library/subprocess.html#subprocess.check_call). Это обычный способ обмена данными процесса, когда '0' означает успешное выполнение, а любой другой код состояния - ошибка. Конечно, выполненный процесс должен придерживаться конвенции и возвращать коды полезного статуса. – famousgarkin

Смежные вопросы