この単純なPythonスクリプトが実際のRedhatバージョンを印刷しないのはなぜですか?
version = os.system( ' cat /etc/redhat-release | awk \'{print $7}\' ' )
print ("my version is " ,version)
私が走るとき
私たちは:
7.2
('my version is ', 0)
- なぜ7.2の代わりに0が出るのですか?
- 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())