5

このエラー コードを返す pylint ユーティリティを使用しています。

Pylint should leave with following status code:

* 0 if everything went fine
* 1 if a fatal message was issued
* 2 if an error message was issued
* 4 if a warning message was issued
* 8 if a refactor message was issued
* 16 if a convention message was issued
* 32 on usage error

status 1 to 16 will be bit-ORed so you can know which different
categories has been issued by analysing pylint output status code

ここで、Bash で致命的なメッセージまたはエラー メッセージが発生したかどうかを判断する必要があります。どうやってするか?そのためにはビット操作が必要だと思います;-)

編集:私は、ビット単位で番号3を実行し、nullに対してテストして、致命的なメッセージまたはエラーメッセージが発行されたかどうかを確認する必要があることを知っています。私の問題は単純です:それを行うためのbash構文。入力は $?、出力は再び $? です。(例: テスト プログラムを使用)。ありがとう!

4

7 に答える 7

4

Bash では、二重括弧を使用できます。

#fatal error
errorcode=7
(( res = errorcode & 3 ))
[[ $res != 0 ]] && echo "Fatal Error"
于 2011-07-08T15:19:44.000 に答える
2

Bash はビット単位の演算子をサポートしています ...

$ let "x = 5>>1"
$ echo $x
2
$ let "x = 5 & 4"
$ echo $x
4
于 2011-07-08T15:04:54.800 に答える
2

ステータスが奇数の場合、最下位桁が 1 の場合、致命的なメッセージが発行されます。

ステータスの次の最上位桁が 1 の場合、エラー メッセージが発行されます。

したがって、最後の 2 桁が両方とも 1 であるかどうかを確認します。つまり、andステータス コードのビット単位0b11が 3 かどうかを確認します。

于 2011-07-08T15:05:21.483 に答える
2

とった!

[ $(($NUMBER & 3)) -ne 0 ] && echo Fatal error or error was issued

ありがとう!

于 2011-07-08T15:19:03.267 に答える
1

(おそらく準最適) bash 算術演算を使用します。

for status in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
do
    if [ $status = 0 ]
    then echo $status: it worked perfectly
    elsif [ $(( $status & 3 )) != 0 ]
    then echo $status: a fatal or error message was sent
    else echo $status: it sort of worked mostly
    fi
done

出力:

0: it worked perfectly
1: a fatal or error message was sent
2: a fatal or error message was sent
3: a fatal or error message was sent
4: it sort of worked mostly
5: a fatal or error message was sent
6: a fatal or error message was sent
7: a fatal or error message was sent
8: it sort of worked mostly
9: a fatal or error message was sent
10: a fatal or error message was sent
11: a fatal or error message was sent
12: it sort of worked mostly
13: a fatal or error message was sent
14: a fatal or error message was sent
15: a fatal or error message was sent
16: it sort of worked mostly

スクリプティング (テスト) を (具体的にはelif節で) より厳密に、またはより明確にすることができると強く思いますが、これはうまくいくようです (そして、私は仕事に取りかかる必要があります)。

pylint ...
status=$?     # Catch exit status before it changes
if [ $status = 0 ]
then echo $status: it worked perfectly
elsif [ $(( $status & 3 )) != 0 ]
then echo $status: a fatal or error message was sent
else echo $status: it sort of worked mostly
fi
于 2011-07-08T15:22:26.953 に答える
1

bash で最後に実行されたコマンドのリターン コードは、$?.

[/tmp] % touch bar
[/tmp] % ls /tmp/bar 
/tmp/bar
[/tmp] % echo $?
0
[/tmp] % ls /tmp/baaz
ls: /tmp/baaz: No such file or directory
[/tmp] % echo $?
1
[/tmp] % 

たとえば、python のモジュールから外部コマンドを呼び出す場合subprocess、サブプロセスが終了すると、Popen オブジェクトから外部コマンドのリターン コードを取得できます。

于 2011-07-08T15:08:44.040 に答える