web-dev-qa-db-ja.com

端末コマンドの「悪い」(0ではない)リターンコードを強制しますか?

私はPythonで書かれたフレームワークを持っており、テスト目的で基本的にサブプロセス(シェル呼び出しとも呼ばれます)を実行したい...それは単にRC!= 0で戻ってくるはずです。または「exit 1」を実行します。しかし、それらは何らかの理由でFileNotFoundErrorに変換されます。

したがって、リターンコード!= 0をトリガーするために他に何ができますか(「信頼できる」方法で。コマンドが将来の時点で突然0を返すべきではないことを意味します)。

Exitと呼ばれるバイナリを「検索」したいと思っていましたが、

> /usr/bin/env exit
/usr/bin/env: exit: No such file or directory
7
GhostCat

常にゼロ以外の終了コードを返すsystemコマンドを探している場合は、/bin/falseが機能するはずです。 man falseから:

NAME
       false - do nothing, unsuccessfully

SYNOPSIS
       false [ignored command line arguments]
       false OPTION

DESCRIPTION
       Exit with a status code indicating failure.
16
steeldriver

コマンドbash -c "exit RETURNCODE"を使用して新しいリターンコードを作成し、「RETURNCODE」を任意の番号に置き換えることができます。 (RETURNCODE mod 256)によって8ビット符号なし整数(0 ... 255)にトリミングされることに注意してください。

echo $?を実行すると、最後のシェルコマンドの戻りコードを確認できます端末内(!)。 「$?」変数には最新の戻りコードが含まれ、「echo」はそれを標準出力に出力します。

6
Byte Commander

さらにテストを重ねた結果、問題が「Linux」側にないことがわかりました。

Pythonにはモジュールshlexがあります。コマンド文字列を「分割」するために使用する必要があります。 「bash exit 1」を呼び出すshlex.split()の出力を使用するようにサブプロセス呼び出しを変更すると、必要なものが得られます。

0
GhostCat