python subprocess使用_Python 使用subprocess调用系统命令方法及示例代码

1、subprocess对比os.system()的优势

subprocess比os.system()更灵活,可以得到stdout,stderr,获到状态代码,更好的错误处理等,官方建议使用subprocess在替代模块os.system(),该subprocess模块提供了更强大的功能来生成新流程并检索其结果。使用该模块优于使用此功能[ os.system()]。

2、使用subproces调用命令

1) Python 3.5之前的Python版本使用callimport subprocess

subprocess.call(["ls", "-l"])

2) Python 3.5及之后的Python版本使用runimport subprocess

subprocess.run(["ls", "-l"])

相关文档:

3、使用subprocess.Popen调用命令

1) subprocess模块的Popen类import subprocess

p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for line in p.stdout.readlines():

print line,

retval = p.wait()

可以随意使用stdout管道中的数据执行所需的操作。实际上,您只需忽略这些参数(stdout=和stderr=),它的行为就类似于os.system()。

2) 调用echo获取命令结果print subprocess.Popen("echo Hello World", shell=True, stdout=subprocess.PIPE).stdout.read()

如果要由shell执行的最终命令作为字符串传递,并且有责任对其进行转义。如果您传递的字符串的任何部分不能被完全信任,则将带来严重的安全隐患。例如,如果用户正在输入字符串的某些/任何部分。如果不确定,请仅将这些方法与常量一起使用。为了给您暗示的含义,请参考以下代码:print subprocess.Popen("echo %s " % user_input, stdout=PIPE).stdout.read()

3) 调用Python脚本

如果想从CGI脚本开始一个长任务。也就是说,子进程的生存期应比CGI脚本执行进程的生存期长。import subprocess

import sys

# Some code here

pid = subprocess.Popen([sys.executable, "longtask.py"]) # Call subprocess

或者pid = subprocess.Popen([sys.executable, "longtask.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值