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. なぜ代わりに07.2?
  2. os.systemからバージョン-7.2を取得しないようにする方法?

コメント

  • Python2またはPython3?
  • これをSOに移動する必要がありますか?

回答

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

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

戻り値はプロセスの終了コード:

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

subprocess.check_output() または

直接出力をキャプチャします。

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

コメント

  • わかりました。ただし、上記の例では、" \ n "?
  • @jangaを使用せずにx86_64のみをキャプチャする方法、arch [:-1]を使用しますか?
  • わかりました、動作します、別の最後の質問、os.system(' sed -is " /7.0/$new_version/g " / tmp / file)、置き換えたい文字列を出力します
  • 改行を削除するには、.rstrip()
  • すべての構文を教えていただけますか?

回答

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を使用できます。これはバージョン番号を抽出するだけで、「プラットフォームに依存しないようにするフィールドのバージョン番号を知る必要はありません。

コメント

  • isこの変数(バージョン)には" \ n "がありません。これは、後でPython内のsedコマンドでこの変数を使用したいためです
  • 質問がありません'何をしていても'意味がないようです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です