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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 18:03   2823   0

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP