- os.system
Python官方文檔關於os.system的描述
os.system(command)
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.
From:http://docs.python.org/2/library/os.html
使用os.system執行系統命令
1 >>> import os 2 >>> returnCode = os.system('adb devices') 3 List of devices attached 4
5 >>> print returnCode 6 0 7 >>>
從上可以看到,只獲取了“返回值”,若要獲取“輸出”,要如何操作呢?
借助臨時文件獲取系統命令的“輸出”
1 >>> import os 2 >>> returnCode = os.system('adb devices') 3 List of devices attached 4
5 >>> print returnCode 6 0 7 >>> import os 8 >>> retruenCode = os.system('adb devices > C://temp.txt') 9 >>> print returnCode 10 0 11 >>> print open('C://temp.txt', 'r').readlines() 12 ['List of devices attached \n', '\n'] 13 >>>
- os.popen
Python官方文檔關於os.popen的描述
os.popen(command[, mode[, bufsize]])
Open a pipe to or from command. The return value is an open file object connected to the pipe, which can be read or written depending on whether mode is 'r' (default) or 'w'. The bufsize argument has the same meaning as the corresponding argument to the built-in open() function. The exit status of the command (encoded in the format specified for wait()) is available as the return value of the close() method of the file object, except that when the exit status is zero (termination without errors), None is returned.
Availability: Unix, Windows.
Deprecated since version 2.6: This function is obsolete. Use the subprocess module. Check especially the Replacing Older Functions with the subprocess Module section.
Changed in version 2.0: This function worked unreliably under Windows in earlier versions of Python. This was due to the use of the _popen() function from the libraries provided with Windows. Newer versions of Python do not use the broken implementation from the Windows libraries.
From:http://docs.python.org/2/library/os.html
“返回值”是一個打開的文件對象,該文件對象里面是系統命令的“輸出”
1 >>> import os 2 >>> returnCode = os.popen('adb devices') 3 >>> print returnCode 4 <open file 'adb devices', mode 'r' at 0x00B99C80>
5 >>> print returnCode.read() 6 List of devices attached 7
8
9 >>>
- subprocess.Popen
Python官方文檔關於subprocess的描述
New in version 2.4. The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as: os.system os.spawn* os.popen* popen2.* commands.*
From: http://docs.python.org/2/library/subprocess.html#
subprocess.call代替os.system
1 >>> import subprocess 2 >>> returnCode = subprocess.call('adb devices') 3 List of devices attached 4
5 >>> print returnCode 6 0 7 >>>
subprocess.check_output代替os.popen
1 >>> import subprocess 2 >>> returnCode = subprocess.check_output('adb devices') 3 >>> print returnCode 4 List of devices attached 5
6
7 >>>
subprocess.Popen使用
stdout
1 >>> import subprocess 2 >>> sp = subprocess.Popen('adb devices', shell=True, stdout=subprocess.PIPE) 3 >>> print sp 4 <subprocess.Popen object at 0x00BB68F0>
5 >>> print sp.stdout.read() 6 List of devices attached 7
8
9 >>>
stdin
FileName: plus.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 a = int(raw_input()) 5 b = int(raw_input()) 6
7 print 'a + b = ', a+b
FileName: test.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 import subprocess 5
6 p =subprocess.Popen('python C://plus.py', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 7
8 p.stdin.write('4\n') 9 p.stdin.write('5\n') 10
11 print p.stdout.readline()
PS:
1、test.py中,'python C://plus.py'里的python是必須的,參見:http://blog.csdn.net/jq0123/article/details/7448589
2、test.py中,p.stdin.write('4\n')里的“\n”是必須的