【问题标题】:Why doesn't python send output to stdout?为什么 python 不将输出发送到标准输出?
【发布时间】:2018-02-10 00:03:23
【问题描述】:

这是一个最小工作示例 (MWE),保存为 mwe.py

import sys

def f(n):
    print("Testing print()...")
    sys.stdout.write("Calculating f({})...".format(n))

从命令行运行时,我没有任何输出:

username@hostname:~/mydir$ python mwe.py 'f(99)'
username@hostname:~/mydir$ 

python 内部运行时 我得到输出(删除了一些信息):

username@hostname:~/mydir$ python
Python 3.5.4 (default, DATE, HH:MM:SS)
[GCC X.X.X Compatible Apple LLVM X.X.X (clang-X.X.X)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from mwe import f
>>> f(99)
Testing print()...
Calculating f(99)...
>>>

为什么这些输出语句可以在python 中工作,而不能 在命令行中工作?

【问题讨论】:

  • 当您运行python mwe.py 'f(99)' 时,您将f(99) 作为参数传递给Python。该参数不会针对源文件执行。只执行源文件,它从不调用函数。
  • 出于好奇,为什么投反对票并投票结束?问的问题,回答的问题。从上下文中可以清楚地看到所问的内容。当然,这是一个很容易修复的小错误,但我确信我不是唯一遇到或将遇到此问题的 Python 用户。仅出于这个原因,保留这个问题可能是值得的。

标签: python output stdout python-3.5


【解决方案1】:

python mwe.py 'f(99)' 并不意味着“使用参数99mwe.py 运行f 函数”。如果您想从命令行执行此操作,则可以执行

python -c 'import mwe; mwe.f(99)'

python mwe.py 'f(99)' 表示“运行脚本mwe.py 并将sys.argv[1] 设置为字符串"f(99)"”。脚本mwe.py 根本不检查sys.argv 或打印任何东西;它只是定义了一个函数并结束。

【讨论】:

    【解决方案2】:

    这:python mwe.py 'f(99)' 不应该工作。在这种情况下,'f(99)' 只是作为参数传递给程序。

    尝试改用python -c 'import mwe; mwe.f(99)。 (也可以通过键入python -h 阅读更多关于 python 命令行使用的信息)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2016-12-03
      相关资源
      最近更新 更多