Python 系统命令调用
admin
2023-07-31 01:45:37
0

Python 3不再推荐使用老的os.system()、os.popen()、commands.getstatusoutput()等方法来调用系统命令,而建议统一使用subprocess库所对应的方法如:Popen()、getstatusoutput()、call()。

推荐并记录一些常用的使用范例:

Popen

# 标准用法使用数据传参,可以用shlex库来正确切割命令字符串
>>> import shlex, subprocess
>>> command_line = input()
/bin/vikings -input eggs.txt -output \"spam spam.txt\" -cmd \"echo \'$MONEY\'\"
>>> args = shlex.split(command_line)
>>> print(args)
[\'/bin/vikings\', \'-input\', \'eggs.txt\', \'-output\', \'spam spam.txt\', \'-cmd\', \"echo \'$MONEY\'\"]
>>> p = subprocess.Popen(args) # Success!
import subprocess
try:
    proc = subprocess.Popen([`ls`, `-a`, `/`], stdout=subprocess.PIPE)
    print(proc.stdout.read())  
except:
    print(\"error when run `ls` command\")
# 使用with语句替代try-except-finally
with Popen([\"ifconfig\"], stdout=PIPE) as proc:
    log.write(proc.stdout.read())
# Windows下由于Windows API的CreateProcess()入参为字符串,
# Popen需要把输入的数组拼接为字符串。因此建议直接传入字符串参数。
p = subprocess.Popen(\'D:\\\\Tools\\\\Git\\\\git-bash.exe --cd=\"D:\\\\Codes\"\', stdout=subprocess.PIPE)
print(p.stdout.read())

call

import subprocess
try:
    retcode = subprocess.call(\"mycmd\" + \" myarg\", shell=True)
    if retcode < 0:
        print(\"Child was terminated by signal\", -retcode, file=sys.stderr)
    else:
        print(\"Child returned\", retcode, file=sys.stderr)
except OSError as e:
    print(\"Execution failed:\", e, file=sys.stderr)

getstatusoutput/getoutput

>>> subprocess.getstatusoutput(\'ls /bin/ls\')
(0, \'/bin/ls\')

>>> subprocess.getoutput(\'ls /bin/ls\')
\'/bin/ls\'

详细可以查阅Python 3官方文档:

  • os: https://docs.python.org/3/library/os.htm…

  • subprocess: https://docs.python.org/3/library/subpro…

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...