Linux'ta sessizce başarısız kılan ne olabilir?


20

Bu komutu çalıştırdım:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json

Verileri partyapp_dump.jsondosyaya dökmek için . Ancak tüm veriler ekranda yazdırılır ve boş bir partyapp_dump.jsondosya oluşturulur.

Bu neden olabilir? Test ettim ls > partyapp_dump.jsonve mükemmel çalıştı.

Yanıtlar:


40

İle > sadece standart çıktıya yönlendirmek. Hata çıkışını yeniden yönlendirmek için 2> 'yi deneyin . Her ikisini de yönlendirmek için &> tuşlarını kullanın .


1
FYI, &>yalnızca Bash 4.0 ve iirc'in son zsh sürümlerinde çalışacaktır. Daha taşınabilir bir çözüm için foo > bar 2&>1. Referans: mywiki.wooledge.org/BashFAQ/014
Rein Henrichs

6
@Rinin Henrichs: Bu 2> & 1, 2 değil & 1
camh

Programlamadan bir pnömonik (?) İle hatırlıyorum: '2'nin Konumu (' & ')' na ('&')
hometoast

1
@hometoast: Anımsatıcı mı demek istiyorsun? :)
Pnömonik

22

Python uygulamanızın çıktısını normal STDOUT yerine STDERR çıkış kanalına yazıyor olması gerekir. Kabuk yapısının kullanılması, >yalnızca çıkış kanalına yazılan verileri yakalar ve yönlendirir, ancak aslında yazdırılabilecek başka kanallar da vardır, en yaygın olanı genellikle ikincisidir, genellikle hatalar için kullanılır.

STDERR'yi (2. kanal) yakalamayı da deneyebilirsiniz:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2>&1

2>&1Yapı, normal çıkış kanalına hatalar için çıkış akışı bağlanır. Bir programın hata kanalında yakalamak istediğiniz çıktıyı üretmesi olağandışıdır; genellikle uygulama verileri için değil, hata ayıklama bilgileri için ayrılır. Standart olmayan bir şekilde davrandığından lütfen bu komut dosyasını dikkatli kullanın .

Çıkış ve hata kanallarını aşağıdaki gibi farklı dosyalara da dökebilirsiniz:

python ./manage.py dumpdata partyapp.InvitationTemplate > partyapp_dump.json 2> error_output.txt

5

Zaten önerilen stderr ve stdout çıktı açıklamasına ek olarak, uygulamanız bu akışların her ikisini de yok sayabilir ve çıktısı için açıkça "/ dev / tty" açabilir.


1

Eğer noclobberbash seçeneği ayarlandığında, daha sonra> yönlendirme hedef dosya zaten varsa (değil sessizce de olsa) başarısız olacaktır.

Daha iyi taşınabilirlik için, cmd >| filevarolan herhangi bir dosyanın üzerine yazmaya zorlamak için kullanın .


0

Kaybolursanız, hangi işlemlerin ne yaptığını görmek için her zaman strace ile çalıştırmayı deneyebilirsiniz:

strace -f command

1
Doğru cevap, ama özellikle ilgili değil. Adam şimdi hata akışını yönetmekle ilgili değilse, bir çıktıyla ne yapacağını bileceğini sanmıyorum strace.
Caleb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.