4

Python で Linux コマンドを実行するには、os と subprocess という優れたモジュールがあります。os と subprocess モジュールの両方を使用してコンソールベースの python プログラムに Linux コマンドを統合しましたが、Django では同じことが起こりません。このビューの例を見てみましょう:

def hello(request):
    res = os.system('ls')
    return render_to_response('thanks.html', {'res':res}, context_instance=RequestContext(request))

このビューが返すのは 0 だけです。サブプロセスも試しました。出力が 0 です。何が問題なのですか?

4

2 に答える 2

4

これはDjangoの問題ではありません。それが何をするかos.systemです-それはシステムコールの戻り値を与えます、この場合0は成功した実行のために。

外部プログラムの出力を取得する必要がある場合は、subprocess.check_output(2.7のみ)を使用する必要があります。ただし、興味があるのがディレクトリリストだけである場合は、それを行うためのより良い方法があります。それはを使用することos.listdirです。

于 2012-11-09T09:52:52.087 に答える
0

0この場合は、この場合「何も問題がない」ことを意味する終了ステータスの戻りコードです。

os.systemドキュメントによると:

Unixでは、戻り値は、wait()に指定された形式でエンコードされたプロセスの終了ステータスです。POSIXはCsystem()関数の戻り値の意味を指定していないため、Python関数の戻り値はシステムに依存することに注意してください。

Windowsの場合、戻り値は、コマンドの実行後にシステムシェルによって返される値であり、Windows環境変数COMSPECによって指定されます。command.comシステム(Windows 95、98、およびME)の場合、これは常に0です。cmd.exeシステム(Windows NT、2000、およびXP)では、これはコマンド実行の終了ステータスです。非ネイティブシェルを使用するシステムでは、シェルのドキュメントを参照してください。

于 2012-11-09T09:53:15.070 に答える