質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2290閲覧

Ubuntuでのpyinstallerではターミナルが開かない件で

Yuiti628

総合スコア71

PyInstaller

PyInstallerは、Pythonのスクリプトを一括でWindowsなどで動く実行可能ファイルに変換できるツールです。このツールを用いることで自作のPythonプログラムを別で使用する場合でもPythonをインストールする必要がありません。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/28 06:20

問題点

ubuntu 20.04でpyinstallerを実行して、pythonファイルをlinuxで動くデスクトップアプリにしました。
作成したデスクトップアプリを実行すると問題なく動作しますが、ターミナルが表示されません。
どうすれば、ターミナルが表示されるのでしょうか?

今までに、windowsアプリや、mac osアプリはpyinstallerで作成しました。
どちらも、作成たアプリをクリックするとターミナルが開かれると思います。
pyinstallerのオプションには --noconsole or -wでコンソールを表示しないことはできます。
デフォルトでは表示されると思いたのですが、何度実行しても表示れることはありません。

そういう仕様なら仕方がないと、別の方法を探していますが、なかなか見つからなくて困っています。

python

1import subprocess,os 2subprocess.run(['gnome-terminal'] , shell=True) 3path = os.path.abspath(os.getcwd()) + '/main' 4subprocess.run([f'{path}'] , shell=True)

こんな感じで、実行時にターミナルを表示して、そこからmianというアプリを絶対パスで実行してみましたが。
新しいく出てきたターミナルに書かれるわけではなかったです、、

普通にターミナルとgnome-terminalをすると新しいターミナルが出てきて、そこにカーソルが移るのでできるかと思ったのですが。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そういう仕様なら仕方がない

はい、そういう仕様なので仕方がないです。

Windowsは、基本的に標準出力の出力先(いわゆる「コンソール」と呼ばれているもの)を持たず、もし必要であればコンソールを割り当てなければなりません。(それを起動時に自動的にやってもらうのが、いわゆる「コンソールアプリ」と呼ばれています)
しかし、linuxの場合はデスクトップアプリであろうが何だろうが、標準出力は全て親のプロセスの物を引き継ぐ事になっています。なので、Windowsのような「コンソール」というものは存在しません。(linuxで「コンソール」というと、こちらの意味になります。)

python

1import subprocess,os 2subprocess.run(['gnome-terminal'] , shell=True) 3path = os.path.abspath(os.getcwd()) + '/main' 4subprocess.run([f'{path}'] , shell=True)

gnome端末のような「端末エミュレータ」は、子プロセスの標準出力を画面に表示しています。
ですので、gnome端末上で出力させるのであれば、その子プロセスとして起動させなければなりません。

python

1import subprocess, os 2subprocess.run(['gnome-terminal', '--', os.path.abspath(os.getcwd()) + '/main'], shell=True)

詳しくは、gnome端末の起動オプションを調べて下さい。とりあえず簡単な説明は「gnome-terminal --help」で出力されます。

あと、必ずしもgnome端末があるとは限らないと思いますが、その辺りは考慮しなくてもいいのでしょうか。


既に解決済みですが、追加情報を残しておきます。

あと、必ずしもgnome端末があるとは限らないと思いますが、その辺りは考慮しなくてもいいのでしょうか。

自分で書いておいてなんですが、ではどうすればいいの?と言われると自分も答えられないので、敢えてそれ以上は書いていなかったのですが、後で調べてみるとdebian系のlinuxディストリビューションであれば、「x-terminal-emulator」というコマンドがあり、実行するとその環境で標準とされる端末エミュレータを起動してくれるそうです。

先のプログラムを書き換えると、

python

1import subprocess, os 2subprocess.run(['x-terminal-emulator', '-e', os.path.abspath(os.getcwd()) + '/main'], shell=True)

といった感じでしょうか。(オプションが微妙に違うので、注意)
まぁ、debian系ディストリビューション限定になってしまいますが…。

投稿2020/09/30 11:34

編集2020/10/02 11:46
katsuko

総合スコア3538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問