linux 下关于Python 调用shell命令的方式

最近运维哪里总是烦我,让我帮他们测试和配置什么鬼数据库,简直了,懒得每次都被叫只好写个脚本来滥竽充数了.开始写了一个用Python的MySQLdb的,想起来他们线上环境没有这个Python包,我只好在写一个调用shell的了.记录下:


四种方法

#1.system(...)
import os
ret = os.system('rm -rf /')
#返回值ret只有0表示成功,其他是失败
这个函数可能会用在只执行一个简单任务,并不关心执行结果或者你的执行结果的与否与shell命令的调用成功与否无关.

#2.popen(...)
import os
ret = os.popen('ls /')
#使用管道将执行的结果重定向到ret指向的文件中去,这个ret是一个file类型的对象,也就是与Python中的open函数一样.
#使用ret.readlines()执行,可以读取里面的内容
这个函数会将执行的内容重定向到一个文件中去,可以直接读取分析,但是有时候我不希望外面看到的话需要一些特别处理如:将输出的结果重定向到指定文件然后在查看重定向文件即可

示例:

f = os.popen('lss 2>/xxxx.txt; cat /xxxx.txt')  这样我们就拿到了他的错误信息

#3.call(*popenargs, **kwargs)  在subprocess模块中
import subprocess
subprocess(['ls','-al'], shell=Ture, stdout='xxx.txt', stderr='err.txt')
#这里选择了重定向他的输出,他其实还是调用了上面的popen


#4.getoutput() 在commands模块
import commands
commands.getoutput('ls')
综上基本上我们只需要在字符串中写我们想要执行的shell命令就可以

执行sh文件

如果会写shell文件或者有现成的shell文件,那么久不想在Python中去写太多东西,直接执行它就行,这个很简单, 如os.system('sh ./xxx.sh')就可以了如果有要传递的参数就写成os.system('sh ./xxx.sh arg1 arg2 arg3')就可以传递给shell了

例如

#python
import os
os.system('sh ./xxx.sh 1 2 "3 666"') 

#!/bin/bash
#xxx.sh
arg1=$1
arg2=$2
arg3=$3
echo $arg1
echo $arg2
echo $arg3

结果

1

2

3 666

另外值得一说的是如果是调用的mysql可以如下

#执行MySQL命令
import os
os.system('mysql -uroot -p1234 -e"tee /tmp/tmp_mysql.log; use mydb; select * from xx_table")
#tee将mysql的输出重定向到/tmp/tmp_mysql.log  和linux的tee命令一样
#这里重定向sql文件到了/tmp/tmp_mysql.log中去可以在log中查看文件.
#但是这里只是重定向了标准输出,并不包括标准出错!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Python的Subprocess模块来调用Linux命令完成开关机操作。例如,你可以使用“subprocess.call(['shutdown', '-h', 'now'])”来关机,使用“subprocess.call(['reboot'])”来重启。 ### 回答2: 我们可以使用`subprocess`模块来调用Linux命令完成开关机操作。下面是一个使用Python调用Linux命令开关机的示例代码: ``` import subprocess def shutdown(): command = "sudo shutdown now" subprocess.call(command, shell=True) def restart(): command = "sudo reboot" subprocess.call(command, shell=True) def main(): choice = input("请选择操作:\n1. 关机\n2. 重启\n") if choice == '1': shutdown() elif choice == '2': restart() else: print("无效的选择") if __name__ == "__main__": main() ``` 以上代码定义了两个函数`shutdown`和`restart`用于调用Linux命令实现关机和重启操作。`subprocess.call`函数用于执行命令,参数`shell=True`是用于打开shell执行命令。 在`main`函数中,我们使用`input`函数获取用户的选择,根据选择调用相应的函数执行对应的操作。 注意:在代码中使用了`sudo`命令,需要确保运行脚本的用户有执行相关命令的权限。 ### 回答3: 在Python中可以使用`subprocess`模块来调用Linux命令完成开关机操作。 要开机,可以使用`subprocess.call()`函数来执行`sudo shutdown -r now`命令。该命令会立即重新启动系统。以下是一个示例代码: ```python import subprocess def turn_on(): subprocess.call(['sudo', 'shutdown', '-r', 'now']) turn_on() ``` 要关机,可以使用`subprocess.call()`函数来执行`sudo shutdown -h now`命令。该命令会立即关机系统。以下是一个示例代码: ```python import subprocess def turn_off(): subprocess.call(['sudo', 'shutdown', '-h', 'now']) turn_off() ``` 请注意,上述示例中使用了`sudo`命令,因此需要确保当前用户具有执行`sudo`命令的权限。如果需要在Python脚本中执行`sudo`命令,通常需要在执行脚本时输入密码。 另外,还可以使用`os.system()`来执行Linux命令。以下是以开机为例的示例代码: ```python import os def turn_on(): os.system('sudo shutdown -r now') turn_on() ``` 使用`subprocess`模块比使用`os.system()`更加灵活和安全,因为它可以更好地处理命令参数和返回值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值