python 中os.system和commands.getoutput的区别

供稿:hz-xin.com     日期:2025-01-14
python模块os里面os.system命令返回什么?

linux命令都是返回0代表成果,这是一个习惯,基本没有人用返回值0代表命令失败.
所以 os.system(命令) 如果返回为0则带便命令执行成功了.
具体返回其他数值代表什么意思,就要看具体命令是什么了.比如最常用的 ls 命令, 有三个返回值:
0 代表成功
1 代表小问题
2 代表大问题

尚未执行完成的情况下,下面的程序不会继续操作。

看下面的例子即可:

>>> import os
>>> def test():
... print '1111'
... os.system('ping 127.0.0.1')
... print '2222'
... os.system('ping 127.0.0.1')
... print '3333'
...
>>> test()
1111

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
2222

Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64
Reply from 127.0.0.1: bytes=32 time<1ms TTL=64

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
3333
>>>

1. 使用os.system("cmd")

这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。

[python]

os.system("ls")

2. 使用Popen模块产生新的process

现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执
行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen,
PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用
wait()方法,但是也不能获得执行的返回值了。

Popen原型是:

[python]

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。

参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用。

参数Close_sfs:在windows平台
下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管
道。我们不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。

如果参数shell设为true,程序将通过shell来执行。

参数cwd用于设置子进程的当前目录。

参数env是字典类型,用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。

参数Universal_newlines:不同操作系统下,文本的换行符是不一样的。如:windows下用’/r/n’表示换,而Linux下用 ‘/n’。如果将此参数设置为True,Python统一把这些换行符当作’/n’来处理。

参数startupinfo与createionflags只在windows下用效,它们将被传递给底层的CreateProcess()函数,用 于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等。

subprocess.PIPE
在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数,表示与子进程通信的标准流。

subprocess.STDOUT
创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

Popen的方法:

Popen.poll()
用于检查子进程是否已经结束。设置并返回returncode属性。

Popen.wait()
等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)
与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。
Communicate()返回一个元组:(stdoutdata,
stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如
果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

Popen.send_signal(signal)
向子进程发送信号。

Popen.terminate()
停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。

Popen.kill()
杀死子进程。

Popen.stdin
如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

Popen.stdout
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.stderr
如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.pid
获取子进程的进程ID。

Popen.returncode
获取进程的返回值。如果进程还没有结束,返回None。

例如:

[python]

p = Popen("cp -rf a/* b/", shell=True, stdout=PIPE, stderr=PIPE)
p.wait()
if p.returncode != 0:
print "Error."
return -1

3. 使用commands.getstatusoutput方法
这个方法也不会打印出cmd在linux上执行的信息。这个方法唯一的优点是,它不是一个阻塞的方法。即没有Popen函数阻塞的问题。使用前需要import commands。

例如:

[python]

status, output = commands.getstatusoutput("ls")

还有只获得output和status的方法:

[python]

commands.getoutput("ls")
commands.getstatus("ls")

1. 使用os.system("cmd")

2. 使用Popen模块产生新的process

现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执行的信息。的确,Popen非常强大,支持多种参数和模式。使用前需要from subprocess import Popen, 

3:  PIPE。但是Popen函数有一个缺陷,就是它是一个阻塞的方法。如果运行cmd时产生的内容非常多,函数非常容易阻塞住。解决办法是不使用

4:  wait()方法,但是也不能获得执行的返回值了。

5: Popen原型是:

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)  

6:  参数bufsize:指定缓冲。我到现在还不清楚这个参数的具体含义,望各个大牛指点。

7:  参数executable用于指定可执行程序。一般情况下我们通过args参数来设置所要运行的程序。如果将参数shell设为 True,executable将指定程序使用的shell。在windows平台下,默认的shell由COMSPEC环境变量来指定。

8:  参数stdin, stdout, stderr分别表示程序的标准输入、输出、错误句柄。他们可以是PIPE,文件描述符或文件对象,也可以设置为None,表示从父进程继承。

9:  参数preexec_fn只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用



python 中os.system和commands.getoutput的区别
1. 使用os.system("cmd")这是最简单的一种方法,特点是执行的时候程序会打出cmd在linux上执行的信息。使用前需要import os。[python]os.system("ls")2. 使用Popen模块产生新的process 现在大部分人都喜欢使用Popen。Popen方法不会打印出cmd在linux上执 行的信息。的确,Popen非常强大,支持多种参数...

python中os.system出错问题
import os cmd=r'c:\\"Program Files"\\notepad.exe c:\\Program Files\\1.txt'os.system(cmd)注意点:cmd中的命令的路径出现空格需要用引号,后面的文件路径不需要引号。

使用Python执行系统命令方法有哪些
1. os.system()这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息。2. os.popen()这个方法执行命令并返回执行后的信息对象,是通过一个管道文件将结果返回。3. commands模块 注意1:在类unix的系统下使用此方法返回的返回值(status)与脚本或命令执行之后...

python os.system命令求助
另外,说句题外话:os.system启动一个进程后,会等待这个进程退出,再继续执行下面的代码 如果你想启动进程后,你的python程序就继续往下跑,不等待被启动的那个进程结束 可以使用subprocess模块下的Popen函数:import subprocess subprocess.Popen(r'zip -qr D:\\Development\\Python\\Temp\\20110825212607.zip D:...

python执行shell命令?
Python执行Linux系统命令,即在Python脚本中调用Shell命令,具体有以下四种方法:1、os.system \/\/仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息system(command) -> exit_status Execute the command (a string) in a subshell.\/\/如果再命令行下执行,结果直接打印出来:>>> os.system...

python中os.system能排除状态值吗?
可以使用os.popen方法 os.system返回的状态值,os.popen返回的命令输出内容。

python中执行shell命令的4种方法
Python执行shell命令有四种主要方法。第一种方法使用os模块的os.system()函数,直接执行shell命令。然而,此方法无法捕获命令执行的输出。第二种方法使用popen(),它会返回命令执行后的结果作为字符串,但需要额外处理以获取所需信息。第三种方法是使用commands模块,此模块提供简单接口获取命令输出和执行状态。

python中os.system命令报错
1.这个提示说说notepad这个命令不存在,你可以试试:os.system("dir")2.import引用的东西是python的标准库,会在python的安装目录里的lib里,如果是第三方的包,一般会在site-packages里。望采纳!

python中3种调用可执行文件.exe的方法
import os main = "project1.exe"r_v = os.system(main)print (r_v )方法二、commands.getstatusoutput() 会保存可执行程序中的打印值和主函数的返回值,但不会将执行过程中要打印的内容打印出来。import subprocess import os main = "project1.exe"if os.path.exists(main):rc,out= ...

python中执行shell命令的4种方法
介绍Python执行shell命令的四种方法,具体如下:首先,使用os模块中的os.system()函数执行shell命令。然而,该方法无法获取命令输出。其次,使用popen()方法,能够获取命令执行后的结果为字符串,但需自行处理以获取所需信息。这种方法与使用os.system()的效率相同。接着,利用commands模块,能够方便地获取...