Saya ingin menjalankan skrip, yang pada dasarnya menunjukkan keluaran seperti ini:
Installing XXX... [DONE]
Saat ini, saya mencetak Installing XXX...
dulu dan kemudian saya mencetak [DONE]
.
Namun, sekarang saya ingin mencetak Installing xxx...
dan [DONE]
pada baris yang sama.
Ada ide?
python
printing
stdout
line-breaks
user697108
sumber
sumber
Jawaban:
Anda dapat menggunakan
print
pernyataan untuk melakukan ini tanpa mengimporsys
.Koma di ujung
print
baris mencegahprint
dari mengeluarkan baris baru (Anda harus mencatat bahwa akan ada ruang tambahan di akhir output).Solusi Python 3
Karena hal di atas tidak berfungsi di Python 3, Anda dapat melakukan ini sebagai gantinya (sekali lagi, tanpa mengimpor
sys
):Fungsi cetak menerima
end
parameter yang standarnya"\n"
. Mengaturnya ke string kosong akan mencegahnya mengeluarkan baris baru di akhir baris.sumber
print("...", end="", flush=True)
di Python 3, di Python 2 tambahkansys.stdout.flush()
panggilan.print("Progress: {}%".format(var), end="\r", flush=True)
Anda cukup menggunakan ini:
dan hasilnya akan
tidak perlu berlebihan oleh
import sys
. Perhatikan simbol koma di bagian akhir.Python 3+
print("some string", end="");
untuk menghapus insert baris baru di akhir. Baca lebih lanjut olehhelp(print);
sumber
print
fungsi memiliki sintaks yang sedikit berbeda di python 2 VS 3.Anda harus menggunakan karakter backspace ' \ r ' atau (' \ x08 ') untuk kembali ke posisi sebelumnya dalam output konsol
Python 2+:
Python 3:
Kode ini akan dihitung dari 0% hingga 100% pada satu baris. Nilai akhir adalah:
Info tambahan tentang flush dalam kasus ini di sini: Mengapa pernyataan cetak python yang berisi argumen 'end =' berperilaku berbeda di while-loop?
sumber
Gunakan
sys.stdout.write('Installing XXX... ')
dansys.stdout.write('Done')
. Dengan cara ini, Anda harus menambahkan baris baru dengan tangan"\n"
jika Anda ingin membuat ulang fungsi cetak. Saya pikir mungkin tidak perlu menggunakan kutukan hanya untuk ini.sumber
__future__
impor atau hal-hal seperti itu.Tidak ada jawaban yang bekerja untuk saya karena mereka semua berhenti sampai baris baru ditemukan. Saya menulis pembantu sederhana:
Untuk mengujinya:
"Halo" pertama-tama akan mencetak dan menyiram layar sebelum tidur. Setelah itu Anda dapat menggunakan cetakan standar.
sumber
sys.stdout.write
akan mencetak tanpa carriage kembalihttp://en.wikibooks.org/wiki/Python_Programming/Input_and_output#printing_without_commas_or_newlines
sumber
Paling sederhana:
Python 3
Ini berarti akan mengembalikan kursor ke awal, daripada akan mencetak sesuatu dan akan berakhir di baris yang sama. Jika dalam satu lingkaran itu akan mulai mencetak di tempat yang sama itu dimulai.
sumber
print(’something to be override’, end=‘\r’)
lebih sederhana.Contoh sederhana ini akan mencetak 1-10 pada baris yang sama.
sumber
Cetak memiliki
end
argumen opsional , itulah yang dicetak pada akhirnya. Defaultnya adalah baris baru, tetapi Anda bisa mengubahnya menjadi string kosong. misalnyaprint("hello world!", end="")
sumber
print 'something',
. Koma di akhir mencegah penambahan baris baru.Jika Anda ingin menimpa baris sebelumnya (daripada terus-menerus menambahkannya), Anda dapat menggabungkan
\r
denganprint(),
di akhir pernyataan cetak. Sebagai contoh,akan menghitung 0 hingga 9, menggantikan nomor lama di konsol. Itu
"...DONE!"
akan mencetak pada baris yang sama seperti counter terakhir, 9.Dalam kasus Anda untuk OP, ini akan memungkinkan konsol untuk menampilkan persen selesai menginstal sebagai "progress bar", di mana Anda dapat menentukan posisi karakter awal dan akhir, dan memperbarui penanda di antaranya.
sumber
Di sini versi 2,7 yang kompatibel berasal dari versi 3.0 oleh @ Vadim-Zin4uk:
Python 2
Untuk itu, solusi 3.0 yang disediakan terlihat sedikit kembung. Sebagai contoh, metode backspace tidak menggunakan argumen integer dan mungkin bisa dihilangkan sama sekali.
Python 3
Keduanya telah diuji dan bekerja.
sumber
Ini adalah utas yang sangat lama, tetapi inilah jawaban yang sangat teliti dan kode sampel.
\r
adalah representasi string dari Carriage Return dari set karakter ASCII. Ini sama dengan oktal015
[chr(0o15)
] atau heksidimal0d
[chr(0x0d)
] atau desimal13
[chr(13)
]. Lihatman ascii
untuk membaca yang membosankan. Ini (\r
) adalah representasi yang cukup portabel dan cukup mudah bagi orang untuk membaca. Ini sangat sederhana artinya memindahkan carriage pada mesin tik sepanjang perjalanan kembali ke awal tanpa memajukan kertas. ItuCR
bagianCRLF
yang berarti Pengembalian Carriage dan Line Line .print()
adalah fungsi dalam Python 3. Dalam Python 2 (versi apa pun yang Anda tertarik untuk menggunakan),print
dapat dipaksa menjadi fungsi dengan mengimpor definisi dari__future__
modul. Manfaat dariprint
fungsi ini adalah Anda dapat menentukan apa yang akan dicetak pada akhirnya, mengesampingkan perilaku default\n
untuk mencetak baris baru di akhir setiapprint()
panggilan.sys.stdout.flush
memberitahu Python untuk menyiram output dari output standar , yang merupakan tempat Anda mengirim outputprint()
kecuali Anda menentukan sebaliknya. Anda juga bisa mendapatkan perilaku yang sama dengan berjalan denganpython -u
atau mengatur variabel lingkunganPYTHONUNBUFFERED=1
, sehingga melewatkanimport sys
dansys.stdout.flush()
panggilan. Jumlah yang Anda peroleh dengan melakukan hal itu hampir persis nol dan tidak terlalu mudah untuk di-debug jika Anda lupa bahwa Anda harus melakukan langkah itu sebelum aplikasi Anda berperilaku baik.Dan sampel. Perhatikan bahwa ini berjalan dengan sempurna di Python 2 atau 3.
sumber
print () memiliki parameter bawaan "end" yang secara default diatur ke "\ n" Memanggil print ("This is America") sebenarnya memanggil print ("This is America", end = "\ n"). Cara mudah untuk dilakukan adalah dengan memanggil print ("Ini Amerika", end = "")
sumber
Untuk berjaga-jaga jika Anda telah menyimpan nilai-nilai dalam array, Anda dapat memanggilnya dalam format berikut:
sumber
Python menambahkan baris baru sebagai akhir untuk mencetak. Gunakan end = '' untuk python3 untuk metode cetak untuk menambahkan spasi alih-alih baris baru. untuk python2 gunakan koma di akhir pernyataan cetak.
sumber
Ditemukan posting Quora ini , dengan contoh ini yang bekerja untuk saya (python 3), yang lebih dekat dengan apa yang saya butuhkan untuk itu (yaitu menghapus seluruh baris sebelumnya).
Contoh yang mereka berikan:
Untuk mencetak pada baris yang sama, seperti yang disarankan orang lain, gunakan saja
end=""
sumber
Saya menemukan solusi ini, dan sedang bekerja pada Python 2.7
sumber
print
sintaks yang salah untuk Python 2.7 dan kode tidak bekerja bahkan dengan sintaks yang benar.