2012-02-16 15 views
3

誰かが私を例に導くことができるのか、linux(centos)でコマンドを実行するためのコードを手伝ってくれるのかなと思います。基本的に、私は基本的な新鮮なサーバーを持っていて、それを構成したいと仮定しています。私は実行する必要があるコマンドを列挙することができると思った、それは動作するだろうが、私はエラーを取得しています。エラーは、何もしない(泣いている時)と関係しています。Linuxでpythonを使ってシステムコマンドを実行していますか?

私はPythonがコードを送信して別のものを送信し、別のコマンドを送信して各コマンドが実行を終了するのを待っていると考えています(スクリプトが失敗した後、スリフトパッケージがダウンロードされ、正常に圧縮解除されます)。この作業を取得する方法について

#python command list to setup new server 
import commands 
commands_to_run = ['yum -y install pypy autocon automake libtool flex boost-devel gcc-c++ byacc svn openssl-devel make java-1.6.0-openjdk git wget', 'service mysqld start', 
       'wget http://www.quickprepaidcard.com/apache//thrift/0.8.0/thrift-0.8.0.tar.gz', 'tar zxvf thrift-0.8.0.tar.gz', 
       'cd thrift-0.8.0', './configure', 'make', 'make install' ] 


for x in commands_to_run: 
    print commands.getstatusoutput(x) 

任意の提案:

ここでは、コードですか?私のアプローチが完全に間違っていたら私に教えてください(私はbashスクリプトを使うことができますが、私はPythonのスキルを向上させようとしています)。

+0

'os'ライブラリの' system() '関数を調べましたか? (http://docs.python.org/library/os.html#os.system) – yasouser

+0

os.system関数は、Pythonでシステムコールを実行するための推奨手段ではありません。 @phihagは以下のように答えるので、代わりに[サブプロセスモジュール](http://docs.python.org/library/subprocess.html)をチェックしてください。 – michaelfilms

答えて

7

commandsは長い間使用されていませんので、実際にはsubprocess、具体的にはsubprocess.check_outputを使用してください。また、cd thrift-0.8.0はあなたのものではなく、サブプロセスにのみ影響します。あなたはos.chdirを呼び出すか、サブプロセス関数にcwd引数を渡すことができ、次のいずれか

import subprocess, os 
commands_to_run = [['yum', '-y', 'install', 
        'pypy', 'python', 'MySQL-python', 'mysqld', 'mysql-server', 
        'autocon', 'automake', 'libtool', 'flex', 'boost-devel', 
        'gcc-c++', 'perl-ExtUtils-MakeMaker', 'byacc', 'svn', 
        'openssl-devel', 'make', 'java-1.6.0-openjdk', 'git', 'wget'], 
        ['service', 'mysqld', 'start'], 
        ['wget', 'http://www.quickprepaidcard.com/apache//thrift/0.8.0/thrift-0.8.0.tar.gz'], 
        ['tar', 'zxvf', 'thrift-0.8.0.tar.gz']] 
install_commands = [['./configure'], ['make'], ['make', 'install']] 

for x in commands_to_run: 
    print subprocess.check_output(x) 

os.chdir('thrift-0.8.0') 

for cmd in install_commands: 
    print subprocess.check_output(cmd) 

をCentOSのは、Pythonの古代のバージョンを維持するので、あなたの代わりにthis backportを使用することもできます。

出力をそのまま出力したい場合は、サブプロセスがデフォルトでstdout、stderr、およびstdinを継承するので、サブプロセスをcheck_callと呼ぶことができます。

+0

これは、取得したエラーとは無関係かもしれないことに注意してください。あなたが私たちにこれらを手伝ってもらいたいなら、*それらを投稿してください。 – phihag

+0

もちろん、CentOSには古代のPythonが付属しています。その場所ではうまくいきません。 – geoffspear

+0

私はそれを試してあなたに知らせます。私が得たエラーは、フォルダー/コマンドが実行されていたときに存在しなかったが、私が行ってチェックした後にフォルダー/コマンドが存在していたということです。前のコマンドが完了するのを待つことなくコマンドが実行されていたのではないかと思う。あなたのコードを試して結果を見てみましょう。 – Lostsoul

関連する問題