2016-03-23 6 views
0

OSX端末で次のプログラムを実行したいのですが、入力用に2つの数字を入力して値を計算して終了してください。私の端末では、私は、入力します。このPythonプログラムをMac端末から実行するにはどうすればいいですか?

$ python3 APlusB.py 

その後、私は空白行に少しカーソルを取得し、私はその後何をしますか

3 4 

を入力?私は、その後のCtl + Dをヒットした場合のプログラムは、私が欲しいものである、終了しますが、それは7Dを印刷し、

# Uses python3 
import sys 
input = sys.stdin.read() 
tokens = input.split() 
a = int(tokens[0]) 
b = int(tokens[1]) 
print(a + b) 

7はあなたの助けをありがとうアウト私はそれだけで私の値を計算するかどう好む、および印刷します。

+1

'return'キーを押してみましたか? –

+0

はい - プログラムがシェルに戻ることはありません –

+0

BTW、あなたはおそらく '7D'(または、おそらく' 7^D')を出力します。 Ctrl + Dキーを押します。端末は、リーダプログラム(通常はシェルまたは直接的または間接的にシェルとして呼び出されるプログラム)にシグナルを送ることによって、Ctrl + 'Key 'という形式のコードを処理します。 'curses'のようなライブラリは、何も印刷されず、プログラムが何らかの方法でキーコンボを扱うことができるように、物を扱うことができます。しかし、単純なプログラムはそれをしないので、端末はデフォルトで '^ Key'をエコーし​​ます。たとえば、 '^ C'(a.k.a Ctrl + C)を検出すると、ほとんどのシェルは' SIGINT'をフォアグラウンドタスクに送ります。 – 3442

答えて

3

sys.stdin.readEOFを入力するのを待ちます。

inputを使用してみると、ユーザーが改行を入力すると返されます。 変数の入力には、使用する必要のある入力関数を再定義する名前を付けないでください。

+0

このコードはクラスのサンプルで、Pythonの経験はゼロです。ビデオでは、インストラクターは番号を印刷して終了するためのキーコマンドを実行します。 Ctl + D EOFではないですし、7Dでなく7を印刷するべきですか? –

+0

は間違いなく動作しますが、私はあなたが7Dでなく7Dを得るような方法でEOFを送る方法を知りました。あなたの答えに感謝します。 –

+0

@GregBailey:「インタラクティブ」モードではないので、それを呼び出すことはできません。詳細については、私のコメントを参照してください。しかし、パイプを使ってこれを行うことができます: 'echo -e '3 \ n7' | python3。/ APlusB.py'。 – 3442

0

これは入力を取り込むための最良の方法です。それはsys.stdin.readline()

stdin.read(1)標準入力から1つの文字を読み込みを使用してくださいPythonの3のために

tokens = input() 
tokens = tokens.split() 
a = int(tokens[0]) 
b = int(tokens[1]) 
print(a + b) 
+0

どのバージョンのpythonですか? –

+0

@KemyLandいいえ、 '3 4'を整数に変換することはできません。 –

+0

@PeterWood:申し訳ありませんが、よく見ていませんでした。実際には、これはPythonのどのバージョンでも機能しません... – 3442

1

を目的としています。その時点で複数の文字が読み込まれた場合(例えば、読み込まれた1文字に続く改行)、その文字は次の文字を待つバッファに残ります。read()またはreadline()

import sys 
input = sys.stdin.readline() 
tokens = input.split() 
a = int(tokens[0]) 
b = int(tokens[1]) 
print(a + b) 

用法:

esekilvxen263 [7:05] [/home/elqstux] -> python wy.py 
3 4 
7 
esekilvxen263 [7:06] [/home/elqstux] -> 
+0

わかりやすくするために、カスタマイズしたシェルプロンプトを '$'に置き換えるべきでしょう。 – 3442

0
import sys 
input = sys.stdin.read() 
tokens = input.split() 
a = int(tokens[0]) 
b = int(tokens[1]) 
print tokens 
print(a + b) 

あなたが期待するように動作.IT print tokensフロントprint(a+b)を置く場合。

+0

私はこれを試しました(印刷するためにそれを変更しなければなりませんでした)。そしてトークン配列と製品をDを使わずにctl + Dを押して印刷します。 –