ここにコンテキストがあります: 私はpython 2.7.5を使用しています。そして、PythonスクリプトでmavenコマンドだけでなくUNIXコマンドも実行したいと思います。 私はos.system("cmd")
を使って成功しましたが、私は与えられたコマンドの結果に取り組む必要があります。ここでdocといくつかのスレッドを読んだあと、サブプロセスモジュールを使用して、PIPEを使用して出力をstdoutにリダイレクトすることにしました。予期しないことに、私は添付の画像に示すようにOSErrorを取得しています。あなたの助けに感謝します。 は、添付された画像では、与えられたサンプルに加えて、私が試してみました:UNIXコマンドを実行しているときにOSErrorを与えるPythonサブプロセスモジュール
p = os.popen("java -version")
result = subprocess.check_output(p, shell=True)
subprocess.call("ls /usr", shell=True)
p.s. Using shell=True is strongly discouraged (doc), since it can be dangerous when coupled with unsanitized input.
はまた、私はエラーメッセージ/usr/lib64/python2.7/subprocess.py, line 711 adn 1327
に指定したスクリプトで見ていたが、中にmentionnedされているものよりも多くを学ぶことがなかったですエラーメッセージ:raise child_exception Subprocess Terminal Output
ありがとうございました。コマンドout1aとその印刷が現在動作しています。しかし、バージョンが特定の番号と一致するかどうかをチェックしたいので、どのようにして最初の行を絞り込むことができますか?出力をfile.txtにリダイレクトしようとしましたが、動作しません。ターミナル出力を直接抽出して処理するのに役立つコマンドがありますか? – Mams
戻った結果は、複数行のテキストを含む文字列です。 'out1a.splitlines()'を使ってそれを個々の行に分解してください。これはあなたが気にするコンポーネントを選択するための 'タプル(tuple) 'を返します。たとえば、 'print(out1a.splitlines()[0])'を試してみてください。次に、他の文字列メソッドを使用して、必要なバージョン番号を分離します(https://docs.python.org/2/library/stdtypes.html?string-methods#string-methodsを参照) –
私の問題を解決するのに役立ちました。再び、Gilに感謝します。インポートのサブプロセス import re res = subprocess.check_output(['java'、 '-version']、stderr = subprocess.STDOUT)res2 = res.splitlines(0).split )[2] のversionNumber = re.findall( '[0-9 ._] +'、RES2) プリント(のversionNumber) のversionNumber場合は[0]> = 1.7: \tプリント他に "クール" : \t print "新しいバージョンをインストールする" – Mams