🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

8799閲覧

Python3でエンターを押したらprintを実行するというのは可能ですか?

ichiki

総合スコア6

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/30 07:45

編集2019/11/30 12:14

前提・実現したいこと

コマンドラインでエンターを押したらprintで文字を表示させたいです

試したこと

input関数を使い、if文でエンターを押したのを感知してprintさせるというのはできたのですが、input関数だとエンター以外を打つとプログラムが落ちたり、打った文字がそのままコマンドライン上に表示されるので、input関数以外の方法があれば教えていただきたいです

落ちたコード

Python

1import msvcrt 2x=msvcrt.getwch() 3 4if x=="\r": 5print("エンター")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/11/30 07:46

その落ちるというコードを提示しましょう
ichiki

2019/11/30 09:42 編集

import msvcrt x=msvcrt.getwch() if x=="\r": print("エンター") です
y_waiwai

2019/11/30 09:42

質問文は編集できるので、そっちに追記しましょう 修正依頼は読まれませんし ましかし、それで落ちるってことはないと思いますが、何か他のところで変なことしてませんか?
ichiki

2019/11/30 12:17

わかりました! エンターを押せばprintされますが、エンター以外を押すとプログラムが終了してしまうのです。
guest

回答3

0

getpassモジュールのgetpass関数で文字列を表示入力を表示せずに入力を受け取れます。

python3

1from getpass import getpass 2 3getpass() 4print("hogehoge")

投稿2019/11/30 12:50

rtgsdfsdg

総合スコア174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichiki

2019/11/30 15:32 編集

試してきたんですが、Password: とコマンドラインに出ます これを消すことは可能ですか?
rtgsdfsdg

2019/12/03 08:42 編集

引数に空の文字列を渡すといいですよ。 こんなかんじで↓ s = getpass("")
guest

0

これでだめですか?

python

1input("Hit Return key.") 2print("OK.")

エコーバックさせたくないということなので、termiosを使ったサンプルコード。

Python

1import sys 2import termios 3 4print('a') 5 6tty = sys.stdin.fileno() 7attr = termios.tcgetattr(tty) 8attr[3] = attr[3] & ~termios.ECHO 9termios.tcsetattr(tty, termios.TCSADRAIN, attr) 10input() 11attr[3] = attr[3] | termios.ECHO 12termios.tcsetattr(tty, termios.TCSADRAIN, attr) 13 14print('b')

投稿2019/11/30 11:09

編集2019/11/30 13:28
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichiki

2019/11/30 12:19

それで出来たのですが、input関数を使うとtestと打ったら、それがそのままコマンドラインに残るのでinput関数以外でできないでしょうか。。 もしありましたら教えてくださるとうれしいです!
ichiki

2019/11/30 12:36

なるほど!ありがとうございます そうするともう一つ質問があるんですけど エンター押したら print('a') エンター押したら print('b') みたいな感じに複数回処理を書いてるんですけど、それを使って処理するとコマンドライン側では a b と表示されますか? それとも a b のように一つ目のprintと二つ目のprintの間に改行ができてしまいますか? もし改行ができてしまう場合、その改行をなくすことは可能ですか?
shiracamus

2019/11/30 13:27 編集

これでいかがですか? import sys import termios print('a') tty = sys.stdin.fileno() attr = termios.tcgetattr(tty) attr[3] = attr[3] & ~termios.ECHO termios.tcsetattr(tty, termios.TCSADRAIN, attr) input() attr[3] = attr[3] | termios.ECHO termios.tcsetattr(tty, termios.TCSADRAIN, attr) print('b')
guest

0

自己解決

getch()を使って解決しました

投稿2019/12/03 03:53

ichiki

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問