私はScientific Linux(バージョン=7.6(Nitrogen))を使用するリモートサーバーで作業しています。私はPython3で簡単なWebアプリケーションを作成しましたが、Mateターミナル(どのターミナルでも動作します)を頻繁に開いて、次のように書いていました。
bash
python3 my_app.py
したがって、ブラウザでアプリがローカルで動作するかどうかを確認できます。
これをもっと簡単にする方法が欲しいです。シェル スクリプトをクリックするだけで、ターミナル ウィンドウが開き、前述のコマンドが実行されます。その後、ターミナル ウィンドウは開いたままになり、ブラウザーで Web アプリケーションを確認できるようになります。
私は次の行を含むシェル スクリプトを作成しました:
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'"
ここで推奨されているように、Ubuntu の場合:https://askubuntu.com/questions/46627/how-can-i-make-a-script-that-opens-terminal-windows-and-executes-commands-in-the (注: 他の回答はすべて試しましたが、機能しませんでした。Gabriel Staples の回答だけがほぼ機能しました)。また、ファイルをプログラムとして実行できるようにしました。
このソリューションには 2 つの問題があります。まず、ターミナルが開いたままになりません。次に、ファイルをクリックすると、次のメッセージを受け取りました (ターミナルが閉じられる前)。ModuleNotFoundError: No module named 'flask'
これは、スクリプトがこのサーバーで間違ったバージョンの python3 を使用しているためです。管理者によってインストールされたものと、ホーム ディレクトリに私がインストールした anaconda バージョンがあります。私は、 をbash
使用する前に と記述することでこの問題を回避してきました。 を使用した後は、ホーム ディレクトリの .bashrc ファイルを使用し、変数によって自分のバージョンの python3 が優先されるようpython3 my_app.py
です(ターミナルに記述する前と後で異なることを確認しました)。bash
$PATH
$PATH
bash
ターミナル ウィンドウを開いてその中でコマンドを実行し、その後は開いたままにするスクリプト (Scientific Linux 上) を作成する方法があるかどうか知りたいです。
また、この後、Web アプリケーションがブラウザに自動的にポップアップ表示される方法があるかどうかも知りたいです。
答え1
コマンドが完了するとターミナルは閉じます。ターミナルを開いたままにするには、通常、次のようなプロンプトを表示してスクリプトが完了しないようにします。
while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done
したがって、スクリプトの場合は、これをコマンドの最後に追加しますbash -c
。
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
間違ったPythonを使用している場合は、~/.bashrc
使用して bash -i
または、コマンドで/path/to/python3
plain の代わりに python バージョンを明示的に指定することもできます。python3
したがって、最終的なコマンドは
gnome-terminal --tab --title="tab 1" --command="bash -ci 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
または
gnome-terminal --tab --title="tab 1" --command="bash -c '/path/to/python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"