Uruchomiłem to polecenie:
python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json
Aby zrzucić dane do partyapp_dump.json
pliku. Ale wszystkie dane są po prostu drukowane na ekranie i partyapp_dump.json
tworzony jest pusty plik.
Dlaczego tak się stało? Testowałem ls > partyapp_dump.json
i to działało idealnie.
&>
będzie działać tylko w Bash 4.0 i iirc najnowszych wersjach zsh. Dla bardziej przenośnego rozwiązaniafoo > bar 2&>1
. Odniesienie: mywiki.wooledge.org/BashFAQ/014Twoja aplikacja w Pythonie musi zapisywać dane wyjściowe w kanale wyjściowym STDERR zamiast w normalnym STDOUT. Używanie konstrukcji powłoki
>
tylko przechwytuje i przekierowuje dane zapisane do kanału wyjściowego, ale tak naprawdę istnieje kilka innych kanałów, które można wydrukować, przy czym najczęściej jest to drugi, zwykle używany do błędów.Możesz spróbować przechwycić STDERR (drugi kanał) w następujący sposób:
2>&1
Konstrukcja łączy wyjściowy strumień błędów do normalnego kanału wyjściowego. To niezwykłe, że program generuje dane wyjściowe, które chciałbyś przechwycić w kanale błędów; zwykle byłyby zarezerwowane dla informacji debugowania, a nie danych aplikacji. Proszę używać tego skryptu z pewną ostrożnością, ponieważ działa on w niestandardowy sposób.Możesz także zrzucić kanały wyjściowe i kanały błędów do różnych plików, takich jak to:
źródło
Oprócz już sugerowanego objaśnienia wyjścia stderr vs stdout, aplikacja może po prostu zignorować oba strumienie i jawnie otworzyć „/ dev / tty” dla swoich danych wyjściowych.
źródło
Jeśli
noclobber
ustawiona jest opcja bash, przekierowanie nie powiedzie się (choć nie po cichu), jeśli plik docelowy już istnieje.Aby uzyskać lepszą przenośność, użyj,
cmd >| file
aby wymusić zastąpienie dowolnego istniejącego pliku.źródło
Jeśli się zgubisz, zawsze możesz spróbować uruchomić go strace, aby zobaczyć, co robią procesy:
źródło
strace
.