【问题标题】:executing OS commands from python using modules使用模块从 python 执行操作系统命令
【发布时间】:2016-11-28 21:57:25
【问题描述】:

我想运行一个可以执行 OS (linux) 命令的 python 脚本,我有几个模块可以帮助我做到这一点,比如 os, subprocess 。在 OS 模块中,无法将输出重定向到变量。在 subprocess.popen 中,我无法在参数中使用变量。需要有人帮助寻找替代方案。

我正在尝试从 python 脚本运行一些操作系统命令。例如 df -h 输出。通过使用 os 或 subprocess 等模块可以正常工作。但我无法将这些输出存储到任何变量。

这里无法将此输出保存到变量中。如何将其保存到变量中。

我看到了多个其他选项,例如 subprocess.Popen,但没有得到正确的输出。

下面的程序我使用了 subprocess 模块,但这里我有另一个问题,因为命令很大,我无法在 subprocess.Popen 中使用变量。

【问题讨论】:

  • shantojosee@srv-dcb-erp-mgnt01:~/python> cat ping #!/usr/bin/python import subprocess # 询问用户输入 host = raw_input("输入要ping的主机: ") # 设置 echo 命令并将输出定向到管道 p1 = subprocess.Popen(['ping', '-c 2', host], stdout=subprocess.PIPE) # 运行命令 output = p1. communicate()[0] 打印输出 shantojosee@srv-dcb-erp-mgnt01:~/python>
  • edit您的问题添加代码,而不是 cmets 部分

标签: python scripting


【解决方案1】:

你可以使用subprocess方法check_output

import subprocess
output = subprocess.check_output("your command", shell=True)

在此处查看之前回答的 SO 问题以获取更多信息:https://stackoverflow.com/a/8659333/3264217

有关 check_output 的更多信息,请参阅此处的 python 文档: https://docs.python.org/3/library/subprocess.html#subprocess.check_output

【讨论】:

    【解决方案2】:

    根据您的确切用例使用 subprocess 或 pexpect。

    subprocess 可以做 os.system 所做的以及更多。如果你需要启动一些命令,等待它退出然后得到输出,子进程可以做到:

    import subprocess
    res = subprocess.check_output('ls -l')
    

    但是如果您需要与一些命令行实用程序交互,即重复读/写,那么请查看 pexpect 模块。它是为 Unix 系统编写的,但如果你想跨平台,有一个用于 Windows 的端口,称为 winpexpect。

    spawn 的 'before' 属性可能是你需要的:

    p = pexpect.spawn('/bin/ls')
    p.expect(pexpect.EOF)
    print p.before
    

    (见docs

    【讨论】:

      猜你喜欢
      • 2019-05-13
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2020-05-05
      相关资源
      最近更新 更多