python调用外部程序

本文详细介绍了Python中os.system和subprocess.call方法的使用区别,并通过具体示例展示了如何利用这两种方法来运行外部程序或脚本。文章还特别讨论了在Windows环境下执行多条命令时遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载地址:  https://www.cnblogs.com/songwenlong/p/5940155.html

a.os.system方法

os.system(command)  链接 https://docs.python.org/2/library/os.html#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 to sys.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 C system() function, so the return value of the Python function is system-dependent.

On Windows, the return value is that returned by the system shell after running command, given by the Windows environment variableCOMSPEC: on command.com systems (Windows 95, 98 and ME) this is always 0; on cmd.exe systems (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 subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function. See the Replacing Older Functions with the subprocess Module section in the subprocessdocumentation for some helpful recipes.

Availability: Unix, Windows.

os模块中的system()函数可以方便地运行其他程序或者脚本。其函数原型为:
os.system(command)
command 为要执行的命令,近似于Windows下cmd窗口中输入的命令。

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

b.用subprocess.call()代替os.system()

17.1.4.3. Replacing os.system()    

链接 https://docs.python.org/2/library/subprocess.html#replacing-os-system

1 status = os.system("mycmd" + " myarg")
2 # becomes
3 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", -retcode
5     else:
6         print >>sys.stderr, "Child returned", retcode
7 except OSError as e:
8     print >>sys.stderr, "Execution failed:", e
复制代码

 实例演示:

打开记事本:

1 import os
2 os.system('notepad')

1 import subprocess
2 subprocess.call('notepad')

我们看以下代码:

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

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

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

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

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

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

1 import os
2 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()的区别以后补充。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值