Python 2.7 を使用してバックグラウンドでプロセスを実行する
commands.getstatusoutput(...)
は、バックグラウンド プロセスを処理するほどスマートではありません。subprocess.Popen
またはを使用しますos.system
。
commands.getstatusoutput
バックグラウンド プロセスで失敗する方法のエラーを再現します。
import commands
import subprocess
#This sleeps for 2 seconds, then stops,
#commands.getstatus output handles sleep 2 in foreground okay
print(commands.getstatusoutput("sleep 2"))
#This sleeps for 2 seconds in background, this fails with error:
#sh: -c: line 0: syntax error near unexpected token `;'
print(commands.getstatusoutput("sleep 2 &"))
subprocess.Popen がバックグラウンド プロセスで成功する方法のデモ:
#subprocess handles the sleep 2 in foreground okay:
proc = subprocess.Popen(["sleep", "2"], stdout=subprocess.PIPE)
output = proc.communicate()[0]
print(output)
#alternate way subprocess handles the sleep 2 in foreground perfectly fine:
proc = subprocess.Popen(['/bin/sh', '-c', 'sleep 2'], stdout=subprocess.PIPE)
output = proc.communicate()[0]
print("we hung for 2 seconds in foreground, now we are done")
print(output)
#And subprocess handles the sleep 2 in background as well:
proc = subprocess.Popen(['/bin/sh', '-c', 'sleep 2'], stdout=subprocess.PIPE)
print("Broke out of the sleep 2, sleep 2 is in background now")
print("twiddling our thumbs while we wait.\n")
proc.wait()
print("Okay now sleep is done, resume shenanigans")
output = proc.communicate()[0]
print(output)
os.system がバックグラウンド プロセスを処理する方法のデモ:
import os
#sleep 2 in the foreground with os.system works as expected
os.system("sleep 2")
import os
#sleep 2 in the background with os.system works as expected
os.system("sleep 2 &")
print("breaks out immediately, sleep 2 continuing on in background")