3

プロセス内で、そのプロセスが実行されている場所をPythonで検出する方法はありますか? Spyder で壊れてgetpass.getpass()いる関数を含むコードがいくつかありますが、コマンドラインと IDE の間を常に行き来するのは面倒です。次のようなコードを追加できれば便利です。

if not being run from Spyder:
    use getpass
else:
    use alternative
4

4 に答える 4

9

これが私が最終的に使用したソリューションです。Markus's answerを読んだ後、Spyder が、 などの名前os.environで半ダースほどの環境変数を追加していることに気付きました。 . コードは単純で、Spyder の起動スクリプトとは独立して動作します (私が知る限り):SPYDER_ENCODINGSPYDER_SHELL_ID'PYTHONSTARTUP'

if any('SPYDER' in name for name in os.environ)
    # use alternative
else:        
    # use getpass

文字列は各環境変数名の先頭にあるため、 も使用できますがstr.startswith、柔軟性が低く、少し遅くなります (興味がありました)。

>>> import timeit
>>> s = timeit.Timer("[name.startswith('SPYDER') for name in os.environ]", "import os")
>>> i = timeit.Timer("['SPYDER' in name for name in os.environ]", "import os")
>>> s.timeit()
16.18333065883474
>>> i.timeit()
6.156869294143846

インストール方法によっては、このsys.executable方法が役立つ場合とそうでない場合があります。いくつかの WinPython インストールと別の Python 2.7 インストールがあるため、sys.executable.find('WinPy') == -1Spyder が使用する実行可能ファイルのパスでフォルダー名を検出する条件を確認できました。使用しようとしたときにIDLEで表示される警告がgetpass「うるさく」ないので、私の意見では、状態sys.executable.find('pythonw.exe') == -1を確認して少し大きくしました。onlyを使用sys.executableすると、そのメソッドは次のようになります。

if sys.executable.find('pythonw.exe') == sys.executable.find('WinPy') == -1:
    # use getpass
else:        
    # use alternative

しかし、私はこれを他のマシンでも動作させたいので、別のユーザーが IDLE 実行可能ファイルの名前を変更するよりも、WinPython インストール フォルダー名を変更する可能性の方がはるかに高いため、最終的なコードを使用sys.executableして IDLEos.environを検出し、Spyder を検出して、"どちらの場合でも警告を大きくし、後者ではコードが壊れないようにします。

if any('SPYDER' in name for name in os.environ) \
   or 'pythonw.exe' in sys.executable:
    password = raw_input('WARNING: PASSWORD WILL BE SHOWN ON SCREEN\n\n' * 3
                         + 'Please enter your password: ')
else:        
    password = getpass.getpass("Please enter your password: ")
于 2013-07-19T21:28:38.467 に答える
1

Spyder は、ネイティブ システム ターミナルで現在のエディタ スクリプトを実行するオプションを提供します。これにより、コマンド ラインから実行している場合と同じ動作が生成されます。これを設定するには、 を押して実行設定ダイアログを開きますF6。次に、ラジオボタン「外部システム端末で実行」を選択します。を押して、通常どおりスクリプトを実行しますF5getpassこのアプローチで通常の方法で使用できるはずです。

于 2013-07-19T21:38:20.960 に答える
0

Spyder での実行時に環境変数を追加し、コードでチェックすることができます。

于 2013-07-18T15:59:12.587 に答える