【问题标题】:Executing shell commands in Python在 Python 中执行 shell 命令
【发布时间】:2022-08-18 21:40:18
【问题描述】:

我正在使用 Linux/Python 3 并正在创建一些小脚本,这些脚本包括在 Python 中执行一些命令。

例子: ping 服务器

hostname= \"server.com\"
response= os.system(\"ping -c 1 \" + hostname)
if response == 0:
    print (hostname, \'is up!\')
else:
    print (hostname, \'is down!\')

输出:

PING server.com (10.10.200.55) 56(84) bytes of data.
64 bytes from server.com (10.10.200.55): icmp_seq=1 ttl=61 time=12.4 ms

--- server.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 15.446/15.446/15.446/0.000 ms
server.com is up!

这工作正常,但我不需要打印所有内容。 我怎样才能只得到输出的第一行?

  • 你好,你是linux还是windows?
  • 嘿。我在 Linux
  • 您使用的是哪个版本的 Python 3?

标签: python shell


【解决方案1】:

您可以使用 python3 中的子进程将输出丢弃到 dev null。像这样的东西

import subprocess

hostname= "server.com"
response= subprocess.call(["ping", "-c", "1", hostname], 
stdout=subprocess.DEVNULL,
stderr=subprocess.STDOUT)

if response == 0:
  print (hostname, 'is up!')
else:
  print (hostname, 'is down!')

https://docs.python.org/3/library/subprocess.html#subprocess.DEVNULL

【讨论】:

  • check_output 没有 stdout flag
  • 我得到这个错误: raise ValueError('stdout argument not allowed, it will be overridden.') ValueError: stdout argument not allowed, 它将被覆盖。
  • 道歉。将其更改为调用。现在应该可以工作了。
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多