2016-08-18 2 views
0

«У меня есть фреймворк, который вызывает модули python, bash, tcl, каждый модуль должен заканчиваться некоторым общим статусом выхода SUCCESS = 0, FAILURE = 1. framework поймать его и интерпретировать его, как я могу это сделать. я думал об объявлении класса и импорта этого класса во всех модулях , но как я могу импортировать в TCL и Баш модулей «»»общий статус выхода для сценариев python, bash, tcl

util.py

class returncode: 
    success=0 
    failure=1 

script.sh

#!/bin/bash 
. ../../util.py 
catch_error("error","plugin") 

пока поиске появляется сообщение об ошибке:

./../util.py: line 1: from: command not found 
../../util.py: line 2: import: command not found 
../../util.py: line 5: $'\nall the common utility functions for harness and plugins are provided in this module\n': command not found 
../../util.py: line 6: syntax error near unexpected token `(' 
../../util.py: line 6: `def platform():' 
./sample.sh: line 4: syntax error near unexpected token `"vam","Dada"' 
./sample.sh: line 4: `catch_error("error","plugin")' 
+1

Python, shell и Tcl - три отдельных langauges; вы не можете импортировать один и тот же код во все три. – chepner

+1

Это _might_ можно написать сценарий полиглота, который сделал это, но зачем вам беспокоиться (кроме того, чтобы хвастаться)? Это не практическая цель, чтобы сделать такой трюк. –

+0

Более целесообразно, эти модули выполняются в рамках одного процесса или в качестве подпроцессов? –

ответ

2

Каждый язык описывает вещи по-разному. Фактически это не стартер, чтобы использовать тот же файл, что и исходный код, для нескольких языков одновременно (это можно сделать, но это тяжелая работа и не стоит того). You не импортировать вещи с одного языка на другой без действительно сложных межъязычных прокладок, и их лучше избегать при выполнении простых вещей.

Но на разных языках может быть эквивалент операции. Это относится к вам.

В вашем случае вы должны знать, что понятия успешных и неудачных исполнений, с которыми вы работаете, являются стандартными (за исключением того, что существует много других возможных путей отказа, и так много ненулевых кодов выхода которые являются законными), что означает, что код может быть очень простым. В каждом случае я перечисляю как код для успешного завершения, так и выход с ошибкой. В каждом случае получается, что код выхода по умолчанию равен нулю; код должен только сказать больше, чтобы использовать ненулевой код.

Иногда они будут выглядеть очень похожими (код Tcl и Bash ниже). Не думайте, что они такие же! Они просто могут быть крошечными кусочками, которые выглядят одинаково; более крупная программа, безусловно, не будет одинаковой. Это просто одно из мест, где есть сходства. Добавление чего-либо дополнительного (например, тривиальное условное выполнение) заставит синтаксисы выглядеть совсем по-другому.

Python

import sys 
# Exit with code for success (default) 
sys.exit() 
import sys 
# Exit with code for failure 
sys.exit(1) 

Tcl

# Exit with code for success (default) 
exit 
# Exit with code for failure 
exit 1 

Bash

# Exit with code for success (default) 
exit 
# Exit with code for failure 
exit 1 
Смежные вопросы