Sejak memutakhirkan ke Python 3.4, semua perintah interaktif dicatat ~/.python_history
. Saya tidak ingin Python membuat atau menulis ke file ini.
Membuat symlink /dev/null
tidak berfungsi, Python menghapus file dan membuatnya kembali. The dokumentasi menyarankan untuk menghapus sys.__interactivehook__
, tetapi ini juga menghilangkan tab-selesai. Apa yang harus dilakukan untuk menonaktifkan penulisan file riwayat ini tetapi masih mempertahankan penyelesaian tab?
Detil tambahan:
- Distro: Arch Linux x86_64
- baca 6.3.3
- python 3.4.0-2
python
interactive
Lekensteyn
sumber
sumber
chattr
. Saya mencari satu file konfigurasi (pengguna) atau variabel lingkungan.chmod
adalah solusi yang disarankan oleh python devs dalam laporan bug ini dari beberapa minggu yang lalu, meskipun ada juga beberapa yang menyebutkan~/.inputrc
ada (tidak adaman readline
, BTW, kecuali untuk fungsi perpustakaan).inputrc
danchmod
tidak bekerja untuk saya juga, file akan tetap dimodifikasi (Arch Linux). Adainfo inputrc
halaman, tetapi saya biasanya tidak begitu senang membaca halaman info karena sulit untuk dijelajahi.Jawaban:
Pada Python 3.6, Anda dapat menggunakan readline.set_auto_history untuk menonaktifkan ini:
sumber
Ini bekerja untuk saya.
Membuat
~/.pythonrc
file:Kemudian ekspor:
sumber
set_history_length
melakukan sesuatu yang ajaib? Penyelesaian tab dilakukan untuk fungsi, bukan riwayat.~/.python_history
ditulis (diverifikasi denganPYTHONSTARTUP=$HOME/.pythonrc strace -e file,write -o /tmp/st python
). Saya mulai berpikir bahwa tidak ada cara untuk menonaktifkan ini, tetapi tetap lakukan penyelesaian tab tanpa menduplikasi kode/usr/lib/python3.4/site.py
.Solusi ~ / .pythonrc lainnya:
sumber
Untuk mencegah Python dari menulis
~/.python_history
, nonaktifkan kait yang mengaktifkan fungsi ini:Jika Anda ingin mengaktifkan penyelesaian tab dan menonaktifkan fitur histori, Anda dapat mengadaptasi
site.enablerlcompleter
kode. Tulis kode berikut ke~/.pythonrc
dan aturexport PYTHONSTARTUP=~/.pythonrc
di shell Anda untuk mengaktifkannya.sumber
Sampai diperbaiki dengan cara tertentu di Python, Anda dapat melakukan ini pada sistem UNIX:
Setelah itu Anda akan mendapatkan
setiap kali Anda menghentikan shell python. Status keluar masih akan
0
.Perhatikan bahwa jika Anda membiarkannya sebagai file, Anda perlu membuat dan membuat file lain yang tidak dapat diubah,
~/.python_history
sumber
Masukkan berikut ini dalam file dan atur
PYTHONSTARTUP
untuk itu (atau panggil filesitecustomize.py
dan buat itu dapat diakses dariPYTHONPATH
)Dengan cara ini Anda masih memiliki akses ke penyelesaian tab dan riwayat sebelumnya, tetapi perintah yang Anda masukkan tidak akan ditambahkan ke file riwayat.
sumber
PYTHONSTARTUP
skrip memang dieksekusi.Inilah metode saya (yang pada dasarnya merupakan versi metode berdario yang lebih andal dan pythonic). Ini hanya menonaktifkan penulisan
.python_history
, tetapi tidak membacanya jika ada, atau menambahkan baris baru ke riwayat instance saat ini. Saya sarankan menyimpannya sebagaisite-packages/sitecustomize.py
, karenasite
adalah modul yang menulis.python_history
dan mengimporsitecustomize
jika ada , meskipun menamainya sesuatu yang lain dan menunjuknya denganPYTHONSTARTUP
karya juga.pembaruan: apa yang saya lakukan untuk 3.7, khusus untuk sistem saya, bukan pep8:
sumber
Solusi saya saat ini (untuk versi Python 3 yang cukup baru) mencegah penggunaan default ~ / .python_history tetapi meninggalkan kemungkinan penulisan sejarah secara eksplisit ke file yang diberikan (menggunakan readline.write_history_file (nama file) atau readline.append_history_file (... )) harus memiliki yang berikut dalam file PYTHONSTARTUP seseorang:
Ini memiliki efek samping yang menyenangkan (bagi saya) memberi label riwayat tertulis secara eksplisit dengan waktu startup juru bahasa. Ini bekerja karena perbaikan untuk bug 5845 yang dapat dilihat di sini .
sumber