Python调用外部程序——os.system()和subprocess.call

原创 2016年10月10日 22:42:41

通过os.system函数调用其他程序

预备知识:cmd中打开和关闭程序

cmd中打开程序

a.打开系统自带程序

系统自带的程序的路径一般都已加入环境变量之中,只需在cmd窗口中直接输入程序名称即可。

以notepad为例,直接在cmd窗口中输入notepad后回车即可打开。

b.打开自己安装且没有加入环境变量的程序

以网易云音乐为例,在cmd窗口中需要输入完整的程序路径 "D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"。

注意,双引号是必须的。

若将网易云音乐的路径加入环境变量之中,则在cmd窗口中输入cloudmusic后回车即可运行。

在cmd中关闭程序

在cmd中关闭程序可以使用taskkill命令,语法如下:

taskkill /f /t /im 进程名

注意,这里只需要程序的进程名即可,而非完整路径名。

仍以网易云音乐为例,在cmd窗口中输入 taskkill /f /t /im cloudmusic.exe 后回车即可关闭网易云音乐。

如下图所示:

Python调用外部程序——os.system()和subprocess.call

a.os.system方法

Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system, and has the same limitations. Changes tosys.stdin, etc. are not reflected in the environment of the executed command.

On Unix, the return value is the exit status of the process encoded in the format specified for wait. Note that POSIX does not specify the meaning of the return value of the Csystemfunction, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after runningcommand, given by the Windows environment variableCOMSPEC: oncommand.comsystems (Windows 95, 98 and ME) this is always0; oncmd.exesystems (Windows NT, 2000 and XP) this is the exit status of the command run; on systems using a non-native shell, consult your shell documentation.

The subprocessmodule provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See theReplacing Older Functions with the subprocess Modulesection in thesubprocessdocumentation for some helpful recipes.

Availability: Unix, Windows.

os模块中的system函数可以方便地运行其他程序或者脚本。其函数原型为:

os.system(command)

command 为要执行的命令,近似于Windows下cmd窗口中输入的命令。

如果要向程序或者脚本传递参数,可以使用空格分隔程序及多个参数。

1 status = os.system("mycmd" + " myarg")2 # becomes3 status = subprocess.call("mycmd" + " myarg", shell=True)

Notes:

  • Calling the program through the shell is usually not required.

A more realistic example would look like this:

1 try:2 retcode = call("mycmd" + " myarg", shell=True)3 if retcode < 0:4 print >>sys.stderr, "Child was terminated by signal", -retcode5 else:6 print >>sys.stderr, "Child returned", retcode7 except OSError as e:8 print >>sys.stderr, "Execution failed:", e

实例演示:

打开记事本:

1 import os2 os.system('notepad')

1 import subprocess2 subprocess.call('notepad')

我们看以下代码:

1 import os2 os.system(r'"D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe"')

这段代码会启动网易云音乐,效果和我们在cmd窗口中输入 "D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe" 效果一样。注意字符串中含有空格,所以有 r''。

而以下代码也可以实现同样的功能:

1 import subprocess2 subprocess.call("D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe")

同上面那段代码的区别只是括号中的 r''。

到目前为止一切正常,我们再看下面的代码,尝试着同时打开两个程序:

1 import os2 os.system(r'"D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe""notepad"')3 或4 os.system("D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe""notepad")5 或6 os.system(""D:\Program Files (x86)\Netease\CloudMusic\cloudmusic.exe""notepad"")

以上尝试都不会成功。

换做subprocess.call函数也不能实现。

这个问题早在07年就有人提交过,请参考http://bugs.python.org/issue1524

os.system和subprocess.call的区别以后补充。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Python调用外部程序

通过os.system和subprocess.call()函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序     系统自带的程序的路径一...
  • q46mu28wem
  • q46mu28wem
  • 2017年05月26日 18:14
  • 239

Python调用SVN实现文件批量rename

使用Python调用os模块, import os 先看一下os.system()的用法: >>> help(os.system) Help on built-in function syst...
  • puma004
  • puma004
  • 2013年11月17日 21:32
  • 1987

Python subprocess 模块, 替换os.system

subprocess被用来替换一些老的模块和函数,如:os.system、os.spawn*、os.popen*、popen2.*、commands.* 可见,subprocess是被推荐使用的模块...
  • jophyyao
  • jophyyao
  • 2012年11月24日 12:24
  • 1726

【python】subprocess模块中的Popen与call的区别

1.subprocess.call(*popenargs, **kwargs)   运行命令。该函数将一直等待到子进程运行结束,并返回进程的returncode。如果子进程不需要进行交互,就可以...
  • zhuiqiuuuu
  • zhuiqiuuuu
  • 2017年05月27日 14:10
  • 1073

keras tensorboard的使用, 设置指定GPU及其内存, 强制只使用cpu

1.强制只使用cpu: import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID" # see issue #152 os.env...
  • xiaojiajia007
  • xiaojiajia007
  • 2017年06月05日 12:10
  • 5493

python 执行系统命令比较[zz]

 python 执行系统命令比较[zz]关键字: Python os system 系统命令在此比较一下两种方法执行系统命令的方法,以方便于日后运用:(1. os.system()system(com...
  • jiangnanandi
  • jiangnanandi
  • 2008年10月06日 14:33
  • 2642

os.system(),subprocess.popen()和commands来执行系统命令

最近接触到os.system(),subprocess.popen()和commands来执行系统命令,从网上搜索到许多,现整理如下。1. 使用os.system("cmd")这是最简单的一种方法,特...
  • u013503428
  • u013503428
  • 2014年04月23日 16:57
  • 2341

python当中subprocess里call与Popen的用法区别

http://blog.csdn.net/imzoer/article/details/8678029 subprocess的目的就是启动一个新的进程并且与之通信。 subprocess模块中只定...
  • class_brick
  • class_brick
  • 2017年06月06日 17:24
  • 2310

实例解析shell子进程(subshell )

通过实例,解析个人对shell子进程的一个了解,主要包括以下几个方面 1:什么是shell子进程 2:shell什么情况下会产生子进程 3:子进程的特点与注意事项 4:$变量$...
  • sosodream
  • sosodream
  • 2010年06月21日 12:48
  • 19785

VC++笔记(未整理版本)

匈牙利表示法 关于构造函数 显式调用基类的有参数的构造函数: 类继承当中的三种属性: 引用和指针 重复命名错误及解决 。。。   Windows程序运行原理PPT 窗口的创建步骤 ...
  • csf111
  • csf111
  • 2011年09月07日 19:11
  • 4845
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Python调用外部程序——os.system()和subprocess.call
举报原因:
原因补充:

(最多只允许输入30个字)