python + os.systemから値を印刷する方法

python + os.systemから値を印刷する方法

この単純なPythonスクリプトが実際のRedhatバージョンを印刷しないのはなぜですか?

version = os.system( ' cat /etc/redhat-release  | awk \'{print $7}\' '  )
print ("my version is " ,version)

私が走るとき

私たちは:

7.2
('my version is ', 0)
  1. なぜ7.2の代わりに0が出るのですか?
  2. os.systemからバージョン7.2をインポートするのを防ぐ方法は?

答え1

os.system()プロセスを実行するだけです。、これは出力をキャプチャしません。

コマンドが出力を生成すると、インタプリタ標準出力ストリームに送信されます。

戻り値はプロセスの終了コードです。

Unixでは、戻り値は、wait()で指定された形式でエンコードされたプロセスの終了状態です。

あなたは次のようなものを使用する必要がありますsubprocess.check_output()または、subprocess.Popen()出力を直接キャプチャします。

>>> arch = subprocess.check_output("uname -a | awk '{print $9}'", shell=True);
>>> arch
'x86_64\n'

答え2

subprocessモジュールを使用すると、これを非常に簡単に達成できます。

#!/usr/bin/python3

import subprocess
getVersion =  subprocess.Popen("awk '{print $7}' /etc/redhat-release", shell=True, stdout=subprocess.PIPE).stdout
version =  getVersion.read()

print("My version is", version.decode())

またはawk部品の場合を使用できます sed 's/[^0-9_.-]//g /etc/redhat-release。これにより、バージョン番号のみが抽出され、バージョン番号がどのフィールドであるかを知る必要がなくなり、プラットフォームに依存しません。

答え3

たとえば、次のことができます。

os.system("ping 1.1.1.1 >> ping.txt")
with open("ping.txt", "r") as ping:
    print(ping.read())

関連情報