web-dev-qa-db-ja.com

Pythonスクリプトから実行可能ファイルを呼び出す方法は?

私のPythonスクリプトからこのスクリプトを実行する必要があります。

出来ますか?スクリプトはいくつかの出力を生成し、いくつかのファイルが書き込まれます。これらのファイルにアクセスするにはどうすればよいですか?私はサブプロセス呼び出し機能を試しましたが、成功しませんでした。

fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output

アプリケーション "bar"は一部のライブラリも参照し、出力の他に "bar.xml"ファイルも作成します。これらのファイルにアクセスするにはどうすればよいですか? open()を使用するだけで?

ありがとうございました、

編集:

Pythonランタイムからのエラーはこの行のみです。

$ python foo.py
bin/bar: bin/bar: cannot execute binary file
17
fx.

外部プログラムを実行するには、次のようにします。

_import subprocess
args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aString", "-f", "anotherString")
#Or just:
#args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split()
popen = subprocess.Popen(args, stdout=subprocess.PIPE)
popen.wait()
output = popen.stdout.read()
print output
_

そして、はい、_bin/bar_プログラムが他の分類されたファイルをディスクに書き込んだと想定すると、open("path/to/output/file.txt")を使用して通常どおりにファイルを開くことができます。必要がない場合は、出力を「output」という名前のディスク上のファイルにリダイレクトするためにサブシェルに依存する必要がないことに注意してください。ここでは、ディスクにアクセスせずに、出力を直接pythonプログラムに読み込む方法を示しています。

32
Peter Lyons

最も簡単な方法は次のとおりです。

_import os
cmd = 'bin/bar --option --otheroption'
os.system(cmd) # returns the exit status
_

open()を使用して、通常の方法でファイルにアクセスします。

より複雑なサブプロセス管理を行う必要がある場合は、 subprocess モジュールが適しています。

14
rz.

UNIX実行可能ファイルを実行します。私はMac OSXで次のことを行いましたが、うまくいきました。

import os
cmd = './darknet classifier predict data/baby.jpg'
so = os.popen(cmd).read()
print so

ここに print so結果を出力します。

6
Sumesh Chandran