0

os.system()ファイルに保存したファイルをソースするために、Python クラスから呼び出しを実行しようとしています。Android アプリケーションからサーバーに接続し、Django でメソッドを実行してシステム コールを実行しています。mod_wsgiサーバーは、 Django をデプロイするためにApache を実行しています。これは Django メソッドです。

def post_try(request):
    os.chdir("/usr/local/src")
    response = os.system("source sourceme")
    return HttpResponse(response)

構文に関する限り、コードは正常に機能し、必要なすべてのインポートが行われますが、予想される 0 ではなく 256 エラー コードが返され続けます。Apache ログでエラーを確認すると、次のような結果が得られます。

[Sun Aug 18 19:43:23 2013] [notice] caught SIGTERM, shutting down
[Sun Aug 18 19:43:24 2013] [warn] mod_wsgi: Compiled for Python/2.7.2+.
[Sun Aug 18 19:43:24 2013] [warn] mod_wsgi: Runtime using Python/2.7.3.
[Sun Aug 18 19:43:24 2013] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Sun Aug 18 19:46:04 2013] [notice] caught SIGTERM, shutting down
[Sun Aug 18 19:46:05 2013] [warn] mod_wsgi: Compiled for Python/2.7.2+.
[Sun Aug 18 19:46:05 2013] [warn] mod_wsgi: Runtime using Python/2.7.3.
[Sun Aug 18 19:46:05 2013] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
sh: line 0: source: sourceme: file not found

何が起こっているのかわかりません。/usr/locals/src/lsを使用して何度も確認したフォルダにsourcemeファイルがはっきりとあります。何が起こっているのかわかりません。ディレクトリが正しく変更されていることos.getcwd()を確認しましたが、まだファイルが見つかりません。私が見逃していることがあれば教えてください。私はこの問題に非常に不満を感じており、それを理解することはできません. ありがとうございました

4

1 に答える 1

1

あなたのアプローチは現在意味がありません: os.systemWSGI プロセスの子プロセスを作成しますが、親の環境は子に渡されますが、子の環境は返されず、親と共有されません。

また、sourceバイナリではなく、シェル自体の組み込み関数です。環境変数を設定する場合os.environは、変数の辞書である us を使用します。

os.systemPython を使用しているので、いくつかの呼び出しの代わりに Python プログラムを使用する方がはるかに賢明です。つまり、環境変数を使用して python プログラムを作成し、それをPYTHONPATHdjango コードに追加してインポートします。

于 2013-08-18T20:06:23.247 に答える