2016-03-23 30 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? –