2016-03-23 28 views
0

我想在我的OSX終端中執行下面的程序APlusB.py,爲輸入輸入兩個數字並讓它計算出數值並退出。在我的終端I型:如何從mac終端執行這個python程序

$ python3 APlusB.py 

然後我得到一個小光標放在一個空行,I型

3 4 

什麼我以後做什麼?如果我打的CTL + d然後程序終止,這就是我想要的,但它打印7D和我寧願如果它只是計算我的價值,並打印出7

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

謝謝你的幫助。

+1

你試過按下'return'鍵嗎? –

+0

是的 - 我只是得到更多的空白行,程序不會退出到shell –

+0

順便說一句,你可能會得到'7D'(或者更可能是'7^D'),因爲程序輸出'7',你鍵入Ctrl + D。終端通過發信號通知讀者程序來處理Ctrl +'Key'形式的代碼,通常是一個shell或一個直接或間接調用的shell程序。像'curses'這樣的庫可以處理一些東西,這樣就不會打印任何東西,程序可以用某種方式處理關鍵組合。但是,一個簡單的程序不會這樣做,並且終端默認會回顯'^ Key'。例如,大多數shell在檢測到'^ C'(a.k.a Ctrl + C)時,將向前臺任務發送'SIGINT'。 – 3442

回答

3

sys.stdin.read等待用戶輸入EOF

嘗試使用input它將在用戶輸入新行時返回。 不要命名您的變量輸入,因爲您將重新定義您需要使用的輸入函數。

+0

這段代碼是一個類的樣本,我沒有python的經驗。在視頻中,教師執行一些重要命令,讓它只打印數字並退出。不是Ctl + D EOF,然後不應該只打印7而不是7D? –

+0

,肯定有效,但我不知道如何發送EOF的方式,你得到7而不是7D,謝謝你的答案。 –

+0

@GregBailey:在「交互」模式下沒有辦法,所以稱之爲(儘管不是)。有關詳細信息,請參閱我對問題的評論。但是,您可以使用管道來做到這一點,就像這樣:'echo -e'3 \ n7'| python3。/ APlusB.py'。 – 3442

0

這是接受輸入的最佳方式。其目的是爲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

請使用sys.stdin.readline()

stdin.read(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

爲了清晰起見,您可能應該用'$'替換您的自定義shell提示符。 – 3442

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

如果你把print tokensprint(a+b)。它可以作爲你的期望。

+0

我試過了(不得不將它改爲打印(令牌),然後在按下ctl + D時打印出令牌數組和產品而沒有D.有趣的是,爲什麼在這種情況下打印出D? –