资讯专栏INFORMATION COLUMN

Python 系统命令调用

Ryan_Li / 2341人阅读

摘要:不再推荐使用老的等方法来调用系统命令,而建议统一使用库所对应的方法如。推荐并记录一些常用的使用范例标准用法使用数据传参,可以用库来正确切割命令字符串使用语句替代下由于的入参为字符串,需要把输入的数组拼接为字符串。

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

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

Popen

</>复制代码

  1. # 标准用法使用数据传参,可以用shlex库来正确切割命令字符串
  2. >>> import shlex, subprocess
  3. >>> command_line = input()
  4. /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo "$MONEY""
  5. >>> args = shlex.split(command_line)
  6. >>> print(args)
  7. ["/bin/vikings", "-input", "eggs.txt", "-output", "spam spam.txt", "-cmd", "echo "$MONEY""]
  8. >>> p = subprocess.Popen(args) # Success!

</>复制代码

  1. import subprocess
  2. try:
  3. proc = subprocess.Popen([`ls`, `-a`, `/`], stdout=subprocess.PIPE)
  4. print(proc.stdout.read())
  5. except:
  6. print("error when run `ls` command")

</>复制代码

  1. # 使用with语句替代try-except-finally
  2. with Popen(["ifconfig"], stdout=PIPE) as proc:
  3. log.write(proc.stdout.read())

</>复制代码

  1. # Windows下由于Windows API的CreateProcess()入参为字符串,
  2. # Popen需要把输入的数组拼接为字符串。因此建议直接传入字符串参数。
  3. p = subprocess.Popen("D:ToolsGitgit-bash.exe --cd="D:Codes"", stdout=subprocess.PIPE)
  4. print(p.stdout.read())
call

</>复制代码

  1. import subprocess
  2. try:
  3. retcode = subprocess.call("mycmd" + " myarg", shell=True)
  4. if retcode < 0:
  5. print("Child was terminated by signal", -retcode, file=sys.stderr)
  6. else:
  7. print("Child returned", retcode, file=sys.stderr)
  8. except OSError as e:
  9. print("Execution failed:", e, file=sys.stderr)
getstatusoutput/getoutput

</>复制代码

  1. >>> subprocess.getstatusoutput("ls /bin/ls")
  2. (0, "/bin/ls")
  3. >>> subprocess.getoutput("ls /bin/ls")
  4. "/bin/ls"

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

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37850.html

相关文章

  • Python多版本切换工具-Pyenvvirtualenv及Anaconda科学计算环境的配置

    摘要:为了安装科学计算环境,控制好版本,今天上午总算折腾好了。切换和使用新的虚拟环境这样就能切换为这个版本的虚拟环境。通过输入查看现在版本,可以发现处于虚拟环境下了。指定包的版本多个版本并存,尤其是和的并存。下面用创建一个名叫的版本为的环境。 为了安装Anaconda科学计算环境,控制好python版本,今天上午总算折腾好了。 学习python有时希望在python2.7环境下,有时希望在...

    rozbo 评论0 收藏0
  • python模块之sys

    摘要:返回的信息特定于当前线程以及当前堆栈帧。出于某些原因,这个值可能无法计算,将返回返回安卓版本的构建时间,以整数表示。仅适用于安卓平台返回解释器的检查间隔。可操作此属性实现强制重新加载模块等。 sys模块提供对由解释器使用或维护的某些变量、与解释器交互的函数的访问接口。 sys.abiflags 在使用标准configure脚本构建python的POSIX系统上,该属性包含了PEP 31...

    csRyan 评论0 收藏0
  • python执行shell命令的方法

    摘要:执行命令的方法模块方式说明这个调用相当直接,且是同步进行的,程序需要阻塞并等待返回。返回值是依赖于系统的,直接返回系统的调用返回值,所以和是不一样的。并能够获得新建进程运行的返回状态。使用模块的目的是替代等旧的函数或模块。 python执行shell命令的方法 os模块 os.system方式: import os os.system(top) os.system(cat /proc...

    PumpkinDylan 评论0 收藏0
  • Python - 模块module

    摘要:一什么是模块中,一个文件就称之为一个模块。所有的内置函数为避免模块名冲突,又引入了按目录来阻止模块冲突的方法,称为包。例如下列小程序以自建的模块,编写一个的模块。如果在其他地方导入该模块时,判断将失败,即仅在此模块单独运行时生效。 一、什么是模块 Python中,一个.py文件就称之为一个模块。那么使用模块有什么好处呢? (1)提高了代码的可维护性。(2)代码不必从零开始,当一个模块...

    ranwu 评论0 收藏0

发表评论

0条评论

Ryan_Li

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<