【问题标题】:Close I/O object of an open file descriptor关闭打开的文件描述符的 I/O 对象
【发布时间】:2021-10-03 08:43:51
【问题描述】:

我遇到了一行代码,它使用文件描述符从标准输入获取输入。

print(sum(1-2*('-'in s)for s in[*open(0)][1:]))

从文档here 我发现 file 是一个类似路径的对象,它给出要打开的文件的路径名(绝对或相对于当前工作目录)或文件的整数文件描述符被包裹。 (如果给定了文件描述符,则在关闭返回的 I/O 对象时将其关闭,除非 closefd 设置为 False。)

问题是,当我像这样在 bash 中运行它时

python3 -c "print(sum(1-2*('-'in s)for s in[*open(0)][1:]))"

除非我杀死它,否则我无法终止并退出执行。

你知道在这种情况下我如何关闭 IO 对象吗?

【问题讨论】:

  • 你需要在标准输入上发送 EOF,没有理由杀死任何东西。
  • 只是为了记录EOF==Ctrl-D。当我点击 ctl-c 时,我感到很愚蠢,这就是问题所在。

标签: python stdio


【解决方案1】:

你可以这样做:-

with open(0) as stdin:
    print(sum(1-2*('-' in s)for s in [*stdin][1:]))

然后,您需要使用 Ctrl-D 模拟 EOF。这将表明没有更多输入,上下文管理器将终止并且标准输入将被关闭

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2011-01-31
    • 2017-09-05
    相关资源
    最近更新 更多