2

os.system を使用してシェル コマンドを実行する Python スクリプトがあります。これらのコマンドからの出力は画面にエコーされます。私はこれが好きで、それを維持する必要があります。また、システム コールからの出力の内容に基づいて、スクリプトがアクションを実行できるようにしたいと考えています。これどうやってするの?

私の特定のケースでは、私は電話してos.system("svn update")います。出力を画面に表示する必要があり、(競合が発生した場合など)、ユーザーは svn と対話できる必要があります。出力に基づいてスクリプトがアクションを実行できるようにしたいと考えています。たとえば、ビルド スクリプトが更新されたことがわかった場合にビルドをトリガーします。

私は I/O を自分で処理したくない (それは不必要に複雑に思えるでしょう) し、後でクリーンアップする必要がある一時ファイルに出力を送信したくありません (ただし、必要に応じて処理します)。

編集:

これが私のテストスクリプトです:

#!/usr/bin/python -t

import subprocess

output = subprocess.check_output(["echo","one"])
print "python:", output

output = subprocess.check_output(["echo", "two"], shell=True)
print "python:", output

output = subprocess.check_output("echo three", shell=True)
print "python:", output

そして、ここにその出力があります:

$ ./pytest 
python: one

python: 

python: three

(コード ブロックが表示されない末尾に余分な空白行があります。) 次のようなものが期待されます。

$ ./pytest 
one
python: one
two
python: 
three
python: three
4

1 に答える 1

2

プロセスを実行するには、subprocess.check_output. この場合、次のようなものです。

output = subprocess.check_output(['svn','update'])
print output

ただし、これは python2.7 以降でのみ機能します。古いバージョンの Python で動作するバージョンが必要な場合:

p = subprocess.Popen(['svn','update'],stdout=subprocess.PIPE)
output,stderr = p.communicate()
print output
于 2012-10-17T20:56:20.337 に答える