セットアップ
問題を説明するために、プロジェクトに次のコマンドを作成しました。
foo.py
:
from django.core.management.base import BaseCommand
from django.core.management import call_command
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write("foo")
# I pass `self.stdout` here explicitly because if `foo` is
# redirected, I want `baz` redirected too.
call_command('baz', stdout=self.stdout)
baz.py
:
from django.core.management.base import BaseCommand
from django.core.management import call_command
class Command(BaseCommand):
def handle(self, *args, **options):
# This could be reduced to one call to self.stdout.write
# but this code is meant to minimally reproduce what happens in a
# complex command where multiple self.stdout.write calls are
# made. If the code here were replaced with a single call, it
# would cease to reproduce the issue.
self.stdout.write("baz ", ending='')
# Imagine a lot of stuff happening here with conditionals and
# loops.
self.stdout.write("baz")
実際の動作
私はこのように実行foo
します:
./manage.py foo
そして、コンソールに次の出力が表示されます。
foo
baz
baz
望ましい動作
私が望むのは、コンソールへの出力が次のようになることです。
foo
baz baz
baz
で直接呼び出すと./manage.py baz
、次の出力が得られることに注意してください。
baz baz
2 つの「baz」の間に改行はありません。baz
を介して呼び出されたときに同じレイアウトが必要ですfoo
。