3

サブプロセス呼び出しからgnuscreenでサーバーデーモンを実行しようとしましたが、起動しませんでした

subprocess.call(["screen", "-dmS test ./server"])

実行中の画面には端末が必要だと言われたので、単純に呼び出しで実行できないのはそのためです。これを行うためのコードをいくつか見せていただけますか?

4

1 に答える 1

6

試す

subprocess.call( ["screen", "-d", "-m", "-S", "test", "./server"] )

引数文字列を個別の引数 (文字列ごとに 1 つ) に分割する必要があります。

subprocessドキュメントからの関連する引用は次のとおりです。

UNIX の場合、shell=False (デフォルト): この場合、Popen クラスは os.execvp() を使用して子プログラムを実行します。args は通常、シーケンスでなければなりません。文字列は、その文字列を唯一の項目 (実行するプログラム) とするシーケンスとして扱われます。

UNIX の場合、shell=True の場合: args が文字列の場合、シェルを介して実行するコマンド文字列を指定します。args がシーケンスの場合、最初の項目はコマンド文字列を指定し、追加の項目は追加のシェル引数として扱われます。

したがって、デフォルトでは、引数は指定したとおりに使用されます。文字列を複数の引数に解析しようとはしません。に設定shellした場合trueは、次のことを試すことができます。

subprocess.call("screen -dmS test ./server", shell=True)

文字列はコマンドラインとまったく同じように解析されます。

于 2012-05-30T14:13:15.150 に答える