web-dev-qa-db-ja.com

Pythonのos.system()の戻り値は何ですか?

私はこれに出くわしました:

_>>> import os
>>> os.system('ls')
file.txt README
0
_

os.system() の戻り値は何ですか? 0を取得する理由

40
user813713

os.system の戻り値はOSに依存します。

Unixでは、戻り値は2つの異なる情報を含む16ビットの数値です。ドキュメントから:

下位バイトがプロセスを強制終了したシグナル番号で、上位バイトが終了ステータス(シグナル番号がゼロの場合)である16ビットの数値

そのため、信号番号(下位バイト)が0の場合、理論的には結果を8ビット(result >> 8)シフトしてエラーコードを取得しても安全です。関数 os.WEXITSTATUS はまさにこれを行います。エラーコードが0の場合、通常、プロセスはエラーなしで終了したことを意味します。

Windowsでは、ドキュメントはos.systemの戻り値がシェル依存であることを指定しています。シェルがcmd.exe(デフォルト)の場合、値はプロセスの戻りコードです。繰り返しますが、0はエラーがなかったことを意味します。

その他のエラーコードの場合:

41
rubik

os.system('command')は16ビットの数値を返します。左(lsb)の最初の8ビットはosがコマンドを閉じるために使用する信号について話し、次の8ビットはコマンドの戻りコードについて話します。

00000000    00000000
exit code   signal num

例1-コード1でのコマンド出口

os.system('command') #it returns 256
256 in 16 bits -  00000001 00000000
Exit code is 00000001 which means 1

例2-コード3でのコマンド出口

os.system('command') # it returns 768
768 in 16 bits  - 00000011 00000000
Exit code is 00000011 which means 3

シグナルで試してみてください-例3-os.system()でコマンドとして使用する長時間スリープするプログラムを作成し、kill -15またはkill -9で殺す

os.system('command') #it returns signal num by which it is killed
15 in bits - 00000000 00001111
Signal num is 00001111 which means 15

python program as command = 'python command.py'を持つことができます

import sys
sys.exit(n)  # here n would be exit code

Cまたはc ++プログラムの場合、任意の関数からmain()またはexit(n)からreturnを使用できます#

注-これはUNIXに適用されます

Unixでは、戻り値は、wait()に指定された形式でエンコードされたプロセスの終了ステータスです。 POSIXはCのsystem()関数の戻り値の意味を指定しないため、Python関数の戻り値はシステムに依存します。

os.wait()

子プロセスの完了を待って、そのpidと終了ステータスの指示を含むTupleを返します。16ビット数。その下位バイトはプロセスを強制終了したシグナル番号で、上位バイトは終了ステータスです(シグナル数はゼロです);コアファイルが生成された場合、下位バイトの上位ビットが設定されます。

Availability: Unix

22
AlokThakur

「Unixでは、戻り値はwait()に指定された形式でエンコードされたプロセスの終了ステータスです。POSIXはC system()関数の戻り値の意味を指定しないことに注意してください。 Python関数はシステムに依存します。 "

http://docs.python.org/library/os.html#os.system

エラーがないため、終了コードはゼロです

12
Cez

os.system()は、コマンド出力ではなく、UNIX出力を返します。したがって、エラーがない場合、終了コードは0として書き込まれます。

3
sam

使いたいかもしれません

return_value = os.popen('ls').read()

代わりに。 os.systemはエラー値のみを返します。

1
user2589273