【问题标题】:Why does python return 0 when I fire terminal commands? [duplicate]为什么当我触发终端命令时 python 返回 0? [复制]
【发布时间】:2016-01-29 23:44:45
【问题描述】:

我正在尝试让 python 与我的终端交互,我尝试了以下脚本,它返回 0,而我希望它显示当前目录的内容:

>>> import os
>>> os.system("ls")
0

为什么要这样做? (注意这是一个 mac 命令,因为我在 mac 上)

【问题讨论】:

  • 该命令确实打印当前目录的内容,但只打印
  • 查看docs。当命令成功完成时,它表示返回值为 0。
  • 顺便说一句,我希望这只是一个例子——调用 ls 是在 Python 中获取文件名列表的错误方法(出于许多相同的原因,它是以编程方式获取的错误方法bash 中的文件名;参见mywiki.wooledge.org/ParsingLs)

标签: python terminal


【解决方案1】:

0ls成功完成时的退出状态。

如果你想捕获一个文件名列表,你需要它的标准输出,而不是它的退出状态。 os.system() 不会返回。

我建议:

import subprocess
output = subprocess.check_output(["ls"]) # will raise an exception if ls fails

【讨论】:

  • 啊,有道理。我将如何使它将终端输出打印到外壳?
  • 嗯?使用os.system() 应该已经将输出直接传递到stdout——这不会使其作为变量可供Python访问,但直接将其打印到您的终端Python shell 正在使用。如果您想将输出捕获到 Python 变量,请参阅使用 subprocess 模块的更新。
【解决方案2】:

它返回 0,因为这是命令的退出代码(意味着它干净地退出了)。

如果您想要命令的结果,我建议使用 subprocess 模块 (https://docs.python.org/2/library/subprocess.html#module-subprocess)。

【讨论】:

    【解决方案3】:

    嗯,这就是 os.system 函数的工作原理(来自 python 文档):

    在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态

    在这种情况下0ls 命令的返回值,表示命令成功。 system 函数不捕获 stdoutstderr

    如果您想捕获它们,请使用subprocess 模块。

    【讨论】:

      【解决方案4】:

      它是ls 退出代码。

      如果你执行了一个无效的命令,响应可能不是零。

      >>> os.system("ls -wk")
      ls: invalid line width: k
      512
      

      【讨论】:

        猜你喜欢
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 2012-01-17
        • 2013-09-05
        • 2017-06-13
        • 1970-01-01
        • 2020-04-18
        相关资源
        最近更新 更多