サブプロセスクラスを使用して一連のシーケンスコマンドを実行するのは難しいですが、これはPythonプログラムがcv virtualenvのインストールを呼び出して別のpythonサブプロセスを使って1つのシェルで順次シェルコマンドを実行する
sudo pip install virtualenv virtualenvwrapper && sudo rm -rf ~/.cache/pip && export WORKON_HOME=$HOME/.virtualenvs && source /usr/local/bin/virtualenvwrapper.sh && source ~/.bashrc && mkvirtualenv cv
:
は、これは私が端末から実行するコマンドstrignである(virtualenvの内で実行する必要があります)プログラムは、あなたはそれがCV仮想ENVの作成まで、順番に実行する複数のコマンドが含まれて見ることができます
端末でこれを実行すると、次のようなメッセージが返されます。
(cv) [email protected]:~$
私は、これまでのOpenCV
私のコードを必要とする私のPythonスクリプトを実行できることから、この次のとおりです。
from subprocess import Popen, PIPE, STDOUT
cmd1 = 'sudo pip install virtualenv virtualenvwrapper'
cmd2 = 'sudo rm -rf ~/.cache/pip'
cmd3 = 'export WORKON_HOME=$HOME/.virtualenvs'
cmd4 = 'source /usr/local/bin/virtualenvwrapper.sh'
cmd5 = 'source ~/.bashrc'
cmd6 = 'mkvirtualenv cv'
cmd7 = 'cd /script path'
cmd8 = 'python novo.py'
final = Popen("{}; {}; {}; {}; {}; {}; {}; {}".format(cmd1, cmd2,cmd3, cmd4, cmd5, cmd6, cmd7, cmd8), shell=True, stdin=PIPE,
stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()
log = open('log', 'w')
log.write(stdout)
log.close()
そして、このようなログを見にエラー:
/bin/sh: 1: source: not found
/bin/sh: 1: source: not found
/bin/sh: 1: mkvirtualenv: not found
私はどのように実行のような端末を実現できますか? 再び、配列が重要である。
ありがとうございました。
Hello JF Sebastian、あなたの答えをありがとう、私はあなたが示唆したように私のpythonスクリプトのコードを変更しましたが、今私はエラー "ファイル" programa.py "行3を与える実行 サブプロセスからimport check_call、DEVNULL、STDOUT ImportError:名前DEVNULLをインポートできません " 私はこの種の操作に本当に新しく、私の知識はpythonとopencvにとどまり、この種類の呼び出しとbashファイルで正しく動作する方法はわかりません。 –
私はシバンズの仕組みを本当に理解していませんが、私はpyhton2に変更しました。 'CalledProcessError'を返します。コードやエラーをチェックすることができます。http://postimg.org/image/f6dfdaucr/ –
私の回答は「source:not found」の問題を修正しました。別の問題がある場合。あなたはそれを別の質問として尋ねるべきです。 – jfs