私はpythonスクリプトを入力として受け取り、それをサーバー上の別のスクリプトを呼び出すコマンドにフォーマットし、サブプロセスを使用して実行します:
import sys, subprocess
thingy = sys.argv[1]
command = 'usr/local/bin/otherscript.pl {0} &'.format(thingy)
command_list = command.split()
subprocess.call(command_list)
&
は実行に時間がかかるため、最後にotherscript.pl
を追加し、バックグラウンドで実行することを好みます。ただし、スクリプトはシェルに制御を戻さずに実行されているように見え、実行が終了してプロンプトに戻るまで待機する必要があります。 subprocess
を使用してスクリプトをバックグラウンドで完全に実行する別の方法はありますか?
_&
_はシェル機能です。 subprocess
で動作させる場合は、次のように_Shell=True
_を指定する必要があります。
_subprocess.call(command, Shell=True)
_
これにより、バックグラウンドでコマンドを実行できます。
ノート:
_Shell=True
_なので、上記では_command_list
_ではなくcommand
を使用します。
_Shell=True
_を使用すると、シェルのすべての機能が有効になります。 command
を含むthingy
が信頼できるソースからのものでない限り、これを行わないでください。
この代替方法でも、コマンドをバックグラウンドで実行できますが、デフォルトの_Shell=False
_を使用するため安全です。
_p = subprocess.Popen(command_list)
_
このステートメントが実行された後、コマンドはバックグラウンドで実行されます。完了したことを確認したい場合は、p.wait()
を実行します。
バックグラウンドで実行する場合は、通常ターミナルに送られるNohup
出力を使用して、Nohup.outというファイルに移動することをお勧めします。
import subprocess
subprocess.Popen("Nohup usr/local/bin/otherscript.pl {0} >/dev/null 2>&1 &", Shell=True)
>/dev/null 2>&1 &
は出力を作成せず、バックグラウンドにリダイレクトします