Python 和 Ruby 获取 Shell 命令行执行结果

Python

os.system 、os.popen

# test.py

import sys
import os
import json

aa = os.system('ls')                   # system 只返回是否执行成功,为 0 表示执行成功,其他值表示执行失败
print(aa)
print("-------------------------")
bb = os.popen('ls').read()             # 使用 popen 可以获取命令执行的输出结果
print(bb)
[root@master python3_learning]# python3 test.py
ip-address.py  test.py	world.py
0
-------------------------
ip-address.py
test.py
world.py

subprocess.Popen

后面我发现, subprocess.Popen 来获取命令执行结果也还是很不错的,很多项目里边也喜欢用。

subprocess.PIPE:一个可以被用于 Popen 的 stdin 、stdout 和 stderr 3 个参数的特输值,表示需要创建一个新的管道。

subprocess.STDOUT:一个可以被用于 Popen 的 stderr 参数的输出值,表示子程序的标准错误汇合到标准输出。

import subprocess


p = subprocess.Popen(["cat", "foo.txt"])
result, error = p.communicate()
print('result:', result)

p = subprocess.Popen(["cat", "foo.txt"], stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
result, error = p.communicate()
print('result:', result)

p = subprocess.Popen("cat fo.txt", stderr=subprocess.STDOUT, stdout=subprocess.PIPE, shell=True)
result, error = p.communicate()
print('result:', result)
[root@master python3_learning]# python3 test.py
This is test
hello world
result: None
result: b'This is test\nhello world\n'
result: b'cat: fo.txt: No such file or directory\n'

Ruby 

# test.rb

aa = system('ls')                      # system 只返回是否执行成功,为 true 表示执行成功,其他值表示执行失败
puts aa
puts '-----------------------'
bb = %x(ls)                            # 使用 %x 可以获取命令执行的输出结果
puts bb
[root@master ruby_learning]# ruby test.rb
test.rb  test.txt  world.rb
true
-----------------------
test.rb
test.txt
world.rb

猜你喜欢

转载自blog.csdn.net/TomorrowAndTuture/article/details/110533470