我了解了如何打开文件,然后对它们使用Python的内置函数。但是sys.stdin如何工作?
for something in sys.stdin:
some stuff here
lines = sys.stdin.readlines()
sys.stdin的以上两种不同用法之间有什么区别?它从哪里读取信息?是通过键盘还是我们仍然需要提供文件?
因此,您使用了Python的“内置函数”,大概是这样的:
file_object = open('filename')
for something in file_object:
some stuff here
这通过在文件对象上调用 迭代器 来读取文件,而该 迭代器 恰巧从文件返回下一行。
您可以改用:
file_object = open('filename')
lines = file_object.readlines()
它将行从当前文件位置读取到列表中。
现在,sys.stdin
这只是另一个文件对象,它恰好在程序启动之前由Python打开。您可以根据自己的意愿来处理该文件对象,但这与任何其他文件对象并没有什么不同,只是您不需要open
。
for something in sys.stdin:
some stuff here
将遍历标准输入,直到到达文件末尾。这样:
lines = sys.stdin.readlines()
您的第一个问题实际上是关于使用文件对象的不同方式的。
其次,它从哪里读取?它正在从文件描述符0(零)读取。在Windows上,它是文件句柄0(零)。默认情况下,文件描述符/句柄0连接到控制台或tty,因此实际上是从键盘读取的。但是,通常可以通过外壳(如bash或cmd.exe)使用以下语法将其
重定向 :
myprog.py < input_file.txt
这会将文件描述符零更改为读取文件而不是键盘。在UNIX或Linux中,这使用底层调用dup2()
。看了你的程序文档,了解更多有关重定向(或者man dup2
,如果你是勇敢的)。
我的脚本在,然后调用,但最后一次调用无效。 这是我的剧本: 如果用户在命令行上指定了一个实际的文件参数,则脚本可以正常工作,但如果用户通过管道输入数据并使用: 我需要支持读取,然后是-我如何使它工作?
问题内容: 我正在为比赛设计一个机器人,该机器人通过接收机器人的输入并使用Python的输出。我有以下内容: 问题在于输入是通过流输入的,并且使用上述输入,使我无法打印任何内容,直到关闭流。我该怎么做才能使这项工作? 问题答案: 通过关闭屏蔽功能,您一次只能读取一个字符。因此,无法在非阻塞上下文中工作。我假设您只是想阅读按键来控制机器人。 我在Linux上没有运气,并创建了一种调整设置的方法。因此
问题内容: 我正在使用以下bash命令模式运行memcached: 尝试跟踪整个平台上无与伦比的按键设置。 memtracer脚本在下面,并且可以按预期运行,但有一个小问题。观察中间日志文件的大小,直到memkeywatchYMD.log的大小约为15-18K时,memtracer.py才开始获取输入。有没有更好的方法可以读入stdin或将缓冲区大小减小到1k以下以获得更快的响应时间? 问题答案:
问题内容: 我正在使用以下bash命令模式运行memcached: 尝试跟踪整个平台上关键的无与伦比的装备。 memtracer脚本在下面,并且可以按预期运行,但有一个小问题。注意中间日志文件的大小,直到memkeywatchYMD.log的大小约为15-18K时,memtracer.py才开始获取输入。有没有更好的方法可以读入stdin或将缓冲区大小减小到1k以下以获得更快的响应时间? 问题答案
接下来读什幺 node 核心 stream 模块文档 你可以使用readable-stream)模块来确保你的 stream2 代码兼容node 0.8及其之前的代码。在你 npm install readable-stream 之后直接 require('readable-stream') 而不要 require('stream')。
问题内容: 我的剧本 我的档案 我的输出 如果我在之后放一个空白行,则输出变为 任何人都知道如何解决此问题,所以不需要在末尾添加空白行? 问题答案: 发生的情况是,当 输入未以换行符终止 时,命令将失败。由于文件末尾缺少换行符,因此失败,因此将跳过循环的最后一次迭代。 如果您不想/不能确保输入文件的末尾有换行符,可以将您的文件与进行分组,以使输入的 外观 以换行符终止,例如: 或像这样: