我想运行一个python 3脚本,通过stdin或手动输入数据来为其提供文件。
例如,假设我要用一行打印输入的内容。名为的脚本app.py
如下所示:
from sys import stdin
print("Input says:"+stdin.readline())
然后,我可以通过以下两种方式运行它:
1.将文件作为stdin传递
python app.py < input.txt
2.提示用户输入
python app.py
我的问题是,在这两种情况下,后读标准输入我想提示用户进行一些额外的数据。按照前面提到的示例,它将是:
from sys import stdin
print("Input says:"+stdin.readline())
print("Did you like that? (Yes/No)")
ans = input() # This line is the issue!
if( ans == "Yes"):
print("You liked it!")
上面的注释行对于情况2来说是完美的,但是对于情况1,它会EOFError: EOF when reading a line
因为尝试从文件读取而引发错误。
我想知道在那行之前我可以做些什么
sys.stdin = SOMETHING
其中SOMETHING代表Windows控制台输入。我认为,如果我能够做到这一点,那么这两种情况都将正常工作。
您可以将两种情况视为相同(忽略差异)。您的脚本仅从stdin读取两行。可以从文件重定向stdin或将其附加到控制台,您的脚本在许多情况下可以相同地工作:
print("Read the first line from stdin", input())
answer = input("Did you like that? (Yes/No): ") # read 2nd line
if answer == "Yes":
print("You liked it!")
请参阅可执行代码示例。
问:我想要从文件或从控制台读取一些输入(取决于运行应用程序时使用的参数)。我希望能从控制台读取它们的其他几行。
要直接从控制台读取内容,而不管是否从文件中重定向了stdin,都可以使用msvcrt.getwch()
。请参阅中的示例用法getpass.win_getpass()
。
如果您在接受Unicode输入时遇到问题,安装win_unicode_console
软件包。您可以为python安装,特定用户,脚本整体或临时使用全局启用它win_unicode_console.enable()/.disable()
。要强制它使用控制台,您可以sys.stdin=None
临时设置stdin是否被重定向或称ReadConsoleW()
自己(麻烦)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句