2012-03-07 35 views
0

私はsolaris環境でpythonコマンドを実行しています。 execute_child "[Errno 2]にそのようなファイルやディレクトリがありません"というエラーが表示されるので、私はsubprocess.callを実行できません。私はpopen2/3/4を使って別の方法を試みましたが、 "DeprecationWarning:popen2モジュールは非推奨です。サブプロセスモジュールを使用してください。"いくつかの制限のためにos.systemを使いたいとは思わない。この仕事をする他の方法はありますか? 助けていただければ幸いです。solarisでPythonシステムコマンドを実行

答えて

2

subprocess.popen()を試しましたか?

は、バージョン2.6で撤廃

os.popen2(CMD [、モード[BUFSIZE]]):実際に廃止され

output, error = subprocess.popen(your_command, shell=True, 
       stdout=subprocess.PIPE, stderr=subprocess.PIPE); 

それreplacespopen2()、:それは同じくらい簡単です。この関数は廃止されました。サブプロセスモジュール を使用します。特に古い機能を サブプロセスモジュールセクションに置き換えるかどうかを確認してください。

No such file or directoryエラーについては、絶対パスを使用してください。

+0

これは機能しました。ありがとう –

0

以下は、Solaris 10システムでSolaris Volume Manager(SVM)ボリュームを管理するPythonプログラムのコードです。これは先に記述したのと同じアプローチを使用しますが、p.communicate()に追加します。この場合、エラーメッセージと通常の出力を区別する必要がないため、stderr出力は標準出力にリダイレクトされます。

# Constants 
DATADIR="/etc/lvm" 
METASTAT_CMD="/usr/sbin/metastat" 
MD_CF = DATADIR + "/md.cf" 

def check_svm_volume_exists(): 
    # Check to see if any SVM volume(s) exist or not. If none exist, exit. 
    syscmd = " ".join([METASTAT_CMD, "-p", ">", MD_CF]) 
    p = subprocess.Popen(syscmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
    out_data, err_data = p.communicate() 

    if out_data == "": 
     return out_data 
    else: 
     print("No Solaris Volume Manager volume(s) appear to be configured. Exiting.") 
     sys.exit(1) 
関連する問題