前提・実現したいこと
MacOSでPython3を学習しています。ターミナルでpyファイルを例えば
python test.py
で実行するとします。
test.py内ではinput()関数が使われており、今まではtest.py実行後、入力待ち状態のときに矢印キーで以前の入力にさかのぼることができたり、Command + Cでプログラムの終了ができるようになっていましたが、いきなりできなくなりました。どこかキーを押し間違えてモードが変わった?とかかもしれません。具体的には矢印キーのときには
^[[A, ^[[B, ^[[C, ^[[D
と表記され、command + c に関しては全く反応しません
Python初学者で調べてもいまいちわからなかったのでご存知の方は教えていただけると幸いです。
勉強不足のところもありますが、何卒よろしくお願い致します。
Command+CではなくてControl+Cは試しましたか?反応しなくなる原因はいろいろあるのでなんとも言えませんが、Control+Zはできますか?もしできるならkill -9 %1でとりあえず強制終了してみましょう。あとはtest.pyの内容次第だと思います。
Control + Cはできないと思います。そもそもMacOSなのでControlキーがないです。
もちろんあります。左からControl, Option, Command、スペースキーです。
すみませんありました。Control + Cでプログラムを中断することはできました。しかし、kill -9 % 1で強制終了することはできません。
ValueError: invalid literal for int() with base 10: 'kill'
このようなエラーが出てしまいます
また、Contol + CをしてもControl + Zをしても矢印キーを押すと
^[[Aとか^[[Bとかになってしまい、入力履歴をみることができません
test.py内ではinput()関数が使われており、今まではtest.py実行後入力待ち状態のときに矢印キーで以前の入力にさかのぼることができたり、Command + Cでプログラムの終了ができるようになっていました。
> kill -9 % 1で強制終了
は、Control+Zで一時停止させたプロセスを終了させる手順なので、Control+Cで終了させたらできません
(というか、既に終了してるので、「kill」で終了させる必要はありません)
参考
https://qiita.com/kamykn/items/2fd1293c0bb5a8aa5ebd
https://qiita.com/toshihirock/items/bc6a9a4091afa9bb61f1
> 矢印キーを押すと^[[Aとか^[[Bとかになってしまい、入力履歴をみることができません
は、Python実行中に限っての話でしょうか?
それとも、Pythonを実行してなくて、普通のコマンド(「ls」とか「cd」とか「pwd」とか)を入力できる状態でも、上矢印でコマンド入力の履歴が呼び出せないのでしょうか?
jbpb0さん、補足ありがとうございます。Pythonのinput()はGNU readlineがリンクされていれば履歴が呼び出せるみたいです。
https://docs.python.org/ja/3.8/tutorial/interactive.html?highlight=input#interactive-input-editing-and-history-substitution
@jbpb0さん
kill -9 % 1はControl + Zの前に行いましたが、上記のエラーが出ました。書き方が悪く誤解を招いてしまい申し訳ありません。^[[Aや^[[Bになる現象はInput()で入力待機状態になっているときだけです。普通のコマンドは矢印で入力履歴を見ることができます。
> kill -9 % 1はControl + Zの前に行いました
順番が逆です
Control+Z でプロセスを一時停止 → kill -9 %1 で終了です
あと、「%1」です
「%」と「1」はくっ付けて入力します
間にスペースを入れてはダメです
でも、プロセスを終了させたい場合は、Control+Cで終了させることができるのなら、上記のようにわざわざ
Control+Z → kill -9 %1
をやる必要は、もちろん無いです
Kenji.Noguchiさん
紹介していただいたWebページの内容は、対話モードのことだと思います
ターミナルで
python
とだけ入力してリターンキーを入力して、
>>>
というプロンプトが出て、Pythonのコードを入力できる状態で、上矢印で履歴を呼び出し、左右の矢印でカーソルを移動させられますけど、それのことだと思います
【追記】
input() に付いては、こちらですね
https://docs.python.org/ja/3/library/functions.html#input
質問者さん
当方のMacで使ってるAnacondaのPython 3.7で、
string = input("文字列を入力してください:")
print("文字列", string, "が入力されました。")
を繰り返すコードが書かれてる「testin.py」ファイルを作り、ターミナルで
python testin.py
で実行した場合、「文字列を入力してください:」が表示されてる状態で上矢印を押したら「^[[A」が入力されます
一つ前に入力した文字列は表示されません
【追記】
「testin.py」ファイルの先頭に
import readline
を追加したら、「文字列を入力してください:」が表示されてる状態で上矢印で入力履歴を呼び出せました
jbpb0さん
なるほど。私は今日の今日まで「文字列を入力してください:」が表示されてる状態で上矢印を押したら、入力履歴が呼び出さており、プログラムを書いている途中でいきなりよびだせなくなりました。
なので本当に何が原因なんだろう?という感じです。色々調べていますが、なかなか原因がわかっていません。
コードの先頭に
import readline
を追加しても、ダメでしょうか?
回答1件
あなたの回答
tips
プレビュー