端末コマンドの「不良」(0ではない)戻りコードを強制しますか?


8

私はPythonで記述されたフレームワークを持っています。テストの目的で、基本的にサブプロセス(別名シェル呼び出し)を実行したいのですが...単にRC!= 0で戻ってくるはずです。存在しない実行可能ファイルを呼び出そうとしました。または「exit 1」を実行します。しかし、これらは何らかの理由でFileNotFoundErrorに変換されます。

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

exitというバイナリを「検索」しようと思ったのですが、

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

1
exit 1将来を見据えた方法です。FileNotFoundErrorは別の原因が原因である必要があります。
Jos

「どちらを終了するか」を実行すると、何も見つかりません。したがって、「exit」はbash関数であると想定しています。サブプロセス呼び出しを実行すると、おそらく利用できませんか?!
GhostCat

技術的な問題:ゼロ以外の戻りコードは、質問が示唆するように、悪い状況を示すものではありません。「0」が「何も問題がない」ことを意味するということは、慣例の問題です。実際には、呼び出しプロセスに伝えるための8ビットの情報があります。
Jos

@ジョス私はそれを理解しています。しかしポイントは、RC!= 0はsubprocess.check_call()からの特定の例外を引き起こすということです。この条件を適用して、適切に処理されるようにします(実際のテストでRC!= 0の状況が適切に処理されることを確認します)。
GhostCat 2015

2
いかが/bin/falseですか?
steeldriver 2015

回答:


18

常にゼロ以外の終了コードを返すシステムコマンドを探している場合は、/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.

いいえ、違います。少なくとも、Ubuntuの16.04.4実行しているbashの上で次のコマンドラインは、1の代わりに、5を与える:/bin/false 5; echo $?
fviktor

@fviktor ゼロ以外のステータスで終了します-概要から5
わかる

あなたが正しい。実際のゼロ以外の終了コードを制御する方法はありません。
fviktor

7

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

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


+1。これをシェルスクリプトで記述している場合は、次のようにしてくださいexit RETURNCODEbash -cパーツなしで)
Matt Browne

0

さらにテストを行った結果、私の問題は「Linux」側ではないことがわかりました。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.