問題タブ [python-exec]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - exec() と eval() を避ける必要があるのはなぜですか?
私はこれを複数の場所で何度も見てきましたが、なぜこれが当てはまるのかについて満足のいく説明を見つけたことはありません.
そのため、うまくいけば、ここで 1 つ提示されます。なぜ (少なくとも一般的には) and を使用exec()
してはいけないのeval()
でしょうか?
編集: この質問は Web サーバーに関するものだと思っている人がいるようですが、そうではありません。サニタイズされていない文字列が渡されるのが悪い理由がわかりますexec
。非Webアプリケーションでは悪いですか?
python - Pythonでexec()を安全に使用するには?
私は、返されたクエリが警告またはアラートになるかどうかを評価するためのカスタム ルールをエンド ユーザーが持つことができるアプリケーションの構築を任されています (独自のしきい値に基づいて)。
ユーザーがロジックをテンプレート化する方法を構築しました。例は次のようになります。
およびパラメータは<<21>>
、<<22>>
プログラムで以前に見つかった値に置き換えられます。execCd
この置換がすべて行われると、変数 ( )に次のように格納された非常に単純な if/else ブロック (この例では) が作成されます。
これはexec()
正しくなります。さて、これをどう確保するか。私はこの記事を見てきました: http://lybniz2.sourceforge.net/safeeval.html
私のコードは次のようになります。
ただし、この例外で2番目と3番目のパラメーターがある場合、execは失敗します-NameError: name 'retVal' is not defined
エンド ユーザーが持つカスタム ロジックの一部は広範であり、その多くはかなり定期的に変更されます。私はカスタム ロジックを維持したくありません。エンド ユーザーは、さまざまな警告/アラートのしきい値ロジックをすばやくテストできるようにしたいと考えています。
安全でない (意図的または意図的でない) コードからこの exec ステートメントを保護するにはどうすればよいですか?
python - exec() の python3 print()
python3で、実行すると
Python3 では、exec() の arg2 は dict を想定していますが、dict ではない print() 関数を配置することもできます。なぜ?
python - インターネット/複数のプロトコルを介してPythonモジュールをインポートするか、モジュールを動的に作成します
( )、、またはその他のプロトコルimport
を使用して、インターネット経由で Python モジュールを使用することは可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?http
s
ftp
smb
それは、Python がより多くの 1 つのプロトコルを使用するようにし (ファイルシステムを読み取る)、他のプロトコルも使用できるようにすることだと思います。はい、何倍も遅くなることに同意しますが、いくつかの最適化と将来の帯域幅の拡大により、確実にバランスが取れます.
例えば:
python - Python コマンドを取得して実行できる Python スクリプトを作成するにはどうすればよいですか?
私はPythonにかなり慣れていません。スクリプトを変更して、無限ループで実行し、コンソールから Python コード行を取得し、Python コード行を実行しようとしています。
私は次の例を実行できる何かについて話している:
exec() 関数を使用してみました。スクリプトで定義した関数を実行すると問題なく動作しますが、何らかの理由ですべてのコードを実際に実行することはできません。私はその論理を理解していません。私は得る:
誰でも助けてもらえますか?
ありがとう、
グル
こんにちは、カイルです。
コードは次のとおりです。
python - Python で動的に作成されたモジュールからコードをインポートする
新しいモジュールを動的に作成しようとするプロジェクトがあり、その後のexec
ステートメントでそのモジュールをインポートしようとします。
しかし、これはこの例外をスローします:
私はいくつかのことを試しました: sys.modules に追加しscope
、名前とモジュールを含む dict を作成します。しかし、サイコロはありません。print locals()
ステートメントで a を実行すると、testmodule.testA が表示されますexec
が、インポートできません。ここで何が欠けていますか?
ありがとうございました。
python - exec() で定義されたコールバック中にクロージャーが失われました
Python を使用して 3 日目なので、初心者の間違いをお許しください。だからここに私の作業コードがあります。person.test()が上司にコールバックを登録し、上司がコールバックを呼び出し、すべて正常に動作します。
ただし、コールバックを exec() に変更すると、クロージャが失われます。コールバックは実行されますが、selfとdataが不明であるため、self.woot(data)の呼び出しは失敗します。
私も compile() を試みましたが、うまくいきませんでした。何かご意見は?私の実際のコードははるかに複雑であるため、上司との間で自己/データのコピーを手動で持ち歩きたくありません。閉鎖を維持する方法が本当に必要です。
python - __builtins__ モジュール変数を変更するには?
このコードを実行すると:
パイソンは次のように述べています。
それが私がやりたいことですが、新しいモジュールを作成する(またはロードする)とき:
ご覧のとおり実行されますが、上記のプログラムのように実行されないのが好きです。組み込みの変数と関数をすべて無効にするのが好きです。これを行う方法はありますか?
を印刷すると、任意の Python モジュールなどの変数が含まれmod.__dict__
ていることがわかります。__builtins__
その値を に変更する必要があると思いますが{}
、方法がわかりません。