2012-04-12 4 views
7

私はPythonのWindows版を使用しています。私はPysideを使っているPythonスクリプトを持っています(何も複雑ではなく、 "hello world"のようなものです)。PythonスクリプトがWindowsまたはテキストターミナルから起動されているかどうかわかりますか?

スクリプトファイルをクリックするか、コマンドラインから起動すると完全に実行され、GUIが表示されます。

ただし、スクリプトがテキスト端末(cmd.exe、cygwin、...)から起動されている場合は、GUIを使用しないでください。 GUI出力またはテキスト出力が必要かどうかを自動的に知るスクリプトの一種。

これを行う簡単で簡単な方法はありますか? Windows版のPythonは、Cygwinパッケージに付属のものではありません)を使用して対応したいと考えています。

テキストターミナルからスクリプトを起動するときに、一種の "--no-gui"パラメータを追加するのは明らかな方法ですが、Python(またはPythonライブラリ)で既にツールを提供しているのだろうかと思います。

また、私はこのコンピュータにSSHサーバ(Cygwinベース)を持っていますが、遠隔でスクリプトを実行できますが、GUIは表示されず、エラーメッセージも表示されません。 Windowsのグラフィカルサポートが不足しているためにスクリプトが失敗したかどうか、またはスクリプトがテキスト端末に出力を適合させるべきかどうかを知ることは非常に面白いケースです。

+2

この質問はWindowsに関するものですが、http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-runのディスカッションでは重複しません。 -in-a-terminal-or-via-guiは役に立ちます。 –

+1

さらに詳しい議論はこちら:http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri

答えて

1

ファイルを.pyファイルまたは.pywファイルとして実行できることがわかりました。 2番目のオプションはGUIアプリケーションで使用され、コンソールウィンドウは開きません。これらを区別するために、isattyの方法をsys.stdoutにチェックすることができます。

import sys 
if sys.stdout.isatty(): 
    # .py file is running, with console window 
    pass 
else: 
    # .pyw file is running, no console 
    pass 

EDIT

  • 私はLinuxボックス上のパテ+ sshをしていることを実行しようとした - それはTrueを返します。
  • 私は窓のボックスにmsys bashシェルを使用しようとした - それは真(の.pyファイル)を返す
  • 私はcygwinのパイソンとCygwinのbashシェルを使用しようとした - それは真(の.pyファイル)を返す
  • を残念ながら、私はputty + windows cygwin ssh serverを試すことはできません。
+0

また、 pythonw.exe'をコンソールなしで実行します。 – bereal

+0

面白いですが、すべての場合に機能しません。 cmd.exeからファイルをクリックするとisatty()は.pyに対してはTrue、.pywに対してはFalseなので、あなたのアイデアはうまくいきます。 cygwinとSSHセッション(cygwin用のPuttyとssh)から、isatty()はFalseです(これはCygwinのものではなくWindows版のPythonを使用しています)。それとも、私は何かが恋しいですか? –

+0

本当に申し訳ありませんが、もう一度テストしましたが、あなたの編集内容に反して、Cygwinのbashシェルでは動作しません。どのPythonバージョンを使用しましたか?私は具体的にはPythonのWindows版について話しています。Cygwinパッケージに付属しているものではありません(私はそれがTrueを返しますが、PythonはWindows用です)。 –