今天在学习shell脚本的时候发现了一个很有意思的东西,就是可以使用python的os模块来间接地执行shell脚本程序或者shell命令,以前还真的是没有这么尝试过,今天就简单的操作一下看一下效果吧。
首先,进入到我的目录下面的一个sort文件夹下面,这是我之前写的排序算法的小练习存放的目录:
[root@localhost sort]# ls
BubbleSort.py MergeSort.py test.py
dui1.py p.py total.py
dui.py QuickSort.py 说明read me.txt
five.py SelectionSort.py
InsertSort.py ShellSortSort.py
接下来输入python进入命令行界面:
>>> import os
>>> os.popen('ls')
<open file 'ls', mode 'r' at 0x7f47ebb1b030>
>>> os.popen('python dui.py')
<open file 'python dui.py', mode 'r' at 0x7f47ebb1b0c0>
简单的演示了一下使用os.popen().函数的操作结果。
>>> result = os.popen('python dui.py')
>>> import pprint
>>> pprint.pprint(result)
<open file 'python dui.py', mode 'r' at 0x7f47ebb1b030>
>>> print result
<open file 'python dui.py', mode 'r' at 0x7f47ebb1b030>
可以使用print函数或者pprint模块来进行输出。
当然可以使用它来干很多的事比如:
>>> import os
>>> print os.system('ls')
BubbleSort.py MergeSort.py test.py
dui1.py p.py total.py
dui.py QuickSort.py 说明read me.txt
five.py SelectionSort.py
InsertSort.py ShellSortSort.py
0
>>> print os.system('mkdir aaa')
0
>>> print os.system('ls')
aaa InsertSort.py ShellSortSort.py
BubbleSort.py MergeSort.py test.py
dui1.py p.py total.py
dui.py QuickSort.py 说明read me.txt
five.py SelectionSort.py
0
其中,返回值中的0表示命令执行成功的状态,关于os.system(cmd)的返回值查阅了资料后有如下的解释:
os.system()返回值为0 linux命令返回值也为0.
os.system()返回值为256,十六位二进制数示为:00000001,00000000,高八位转乘十进制为 1 对应 linux命令返回值 1
os.system()返回值为512,十六位二进制数示为:00000010,00000000,高八位转乘十进制为 2 对应 linux命令返回值 2
......其它同理
os.system()返回值为32512,十六位二进制数示为:01111111,00000000,高八位转乘十进制为 127 对应 linux命令返回值 127
........
或者简单说,linux命令返回码 左移8位,然后转换成十进制就变成了 os.system()函数的返回值了。
接下来使用
os.system()来执行一下之前的排序算法,如下:
>>> print os.system('ls')
aaa dui1.py five.py MergeSort.py QuickSort.py ShellSortSort.py total.py
BubbleSort.py dui.py InsertSort.py p.py SelectionSort.py test.py 说明read me.txt
0
>>>
>>> print os.system('python dui.py')
随机序列生成耗时: 0.000219106674194
堆排序结果为
[31, 51, 53, 54, 57, 78, 99, 102, 117, 120, 127, 148, 161, 201, 201, 214, 219, 220, 221, 244, 250, 256, 276, 278, 279, 289, 300, 305, 305, 308, 309, 323, 331, 337, 344, 347, 379, 386, 439, 461, 480, 501, 509, 530, 547, 553, 553, 555, 559, 559, 561, 565, 568, 584, 589, 589, 592, 609, 610, 611, 643, 644, 663, 681, 686, 688, 692, 695, 695, 704, 708, 732, 740, 748, 749, 761, 777, 780, 781, 806, 810, 812, 813, 814, 824, 826, 838, 839, 855, 871, 879, 884, 910, 922, 925, 953, 960, 962, 999, 1000]
堆排序总耗时: 0.000483989715576
归并排序结果为
[31, 51, 53, 54, 57, 78, 99, 102, 117, 120, 127, 148, 161, 201, 201, 214, 219, 220, 221, 244, 250, 256, 276, 278, 279, 289, 300, 305, 305, 308, 309, 323, 331, 337, 344, 347, 379, 386, 439, 461, 480, 501, 509, 530, 547, 553, 553, 555, 559, 559, 561, 565, 568, 584, 589, 589, 592, 609, 610, 611, 643, 644, 663, 681, 686, 688, 692, 695, 695, 704, 708, 732, 740, 748, 749, 761, 777, 780, 781, 806, 810, 812, 813, 814, 824, 826, 838, 839, 855, 871, 879, 884, 910, 922, 925, 953, 960, 962, 999, 1000]
归并排序总耗时: 0.00233292579651
快速排序结果为
[31, 51, 53, 54, 57, 78, 99, 102, 117, 120, 127, 148, 161, 201, 201, 214, 219, 220, 221, 244, 250, 256, 276, 278, 279, 289, 300, 305, 305, 308, 309, 323, 331, 337, 344, 347, 379, 386, 439, 461, 480, 501, 509, 530, 547, 553, 553, 555, 559, 559, 561, 565, 568, 584, 589, 589, 592, 609, 610, 611, 643, 644, 663, 681, 686, 688, 692, 695, 695, 704, 708, 732, 740, 748, 749, 761, 777, 780, 781, 806, 810, 812, 813, 814, 824, 826, 838, 839, 855, 871, 879, 884, 910, 922, 925, 953, 960, 962, 999, 1000]
快速排序总耗时: 0.00103998184204
0
>>> print os.system('python total.py')
Bubble_Sort --->运行时间:1.178026 ms
0
>>> print os.system('python test.py')
堆排序结果为
[-67, -2, 1, 3, 4, 5, 5, 6, 8, 9, 14, 23, 25, 89, 100]
[-67, -2, 1, 3, 4, 5, 5, 6, 8, 9, 14, 23, 25, 89, 100]
堆排序总耗时: 5.07831573486e-05
0
>>> print os.system('python five.py')
选择排序结果为:
[6, 13, 16, 16, 31, 96, 102, 119, 123, 125, 140, 145, 158, 168, 183, 185, 198, 207, 210, 222, 224, 239, 241, 257, 258, 272, 287, 303, 304, 307, 308, 308, 315, 316, 321, 324, 327, 329, 332, 371, 374, 376, 383, 393, 406, 421, 426, 431, 432, 434, 441, 443, 455, 469, 484, 504, 508, 514, 521, 522, 546, 565, 568, 591, 596, 613, 622, 628, 630, 632, 658, 671, 674, 688, 701, 707, 710, 718, 741, 742, 753, 772, 785, 796, 807, 816, 820, 867, 876, 878, 889, 896, 900, 923, 946, 951, 961, 976, 983, 1000]
快速排序结果为:
[6, 13, 16, 16, 31, 96, 102, 119, 123, 125, 140, 145, 158, 168, 183, 185, 198, 207, 210, 222, 224, 239, 241, 257, 258, 272, 287, 303, 304, 307, 308, 308, 315, 316, 321, 324, 327, 329, 332, 371, 374, 376, 383, 393, 406, 421, 426, 431, 432, 434, 441, 443, 455, 469, 484, 504, 508, 514, 521, 522, 546, 565, 568, 591, 596, 613, 622, 628, 630, 632, 658, 671, 674, 688, 701, 707, 710, 718, 741, 742, 753, 772, 785, 796, 807, 816, 820, 867, 876, 878, 889, 896, 900, 923, 946, 951, 961, 976, 983, 1000]
冒泡排序结果为:
[6, 13, 16, 16, 31, 96, 102, 119, 123, 125, 140, 145, 158, 168, 183, 185, 198, 207, 210, 222, 224, 239, 241, 257, 258, 272, 287, 303, 304, 307, 308, 308, 315, 316, 321, 324, 327, 329, 332, 371, 374, 376, 383, 393, 406, 421, 426, 431, 432, 434, 441, 443, 455, 469, 484, 504, 508, 514, 521, 522, 546, 565, 568, 591, 596, 613, 622, 628, 630, 632, 658, 671, 674, 688, 701, 707, 710, 718, 741, 742, 753, 772, 785, 796, 807, 816, 820, 867, 876, 878, 889, 896, 900, 923, 946, 951, 961, 976, 983, 1000]
直接插入排序结果为:
[6, 13, 16, 16, 31, 96, 102, 119, 123, 125, 140, 145, 158, 168, 183, 185, 198, 207, 210, 222, 224, 239, 241, 257, 258, 272, 287, 303, 304, 307, 308, 308, 315, 316, 321, 324, 327, 329, 332, 371, 374, 376, 383, 393, 406, 421, 426, 431, 432, 434, 441, 443, 455, 469, 484, 504, 508, 514, 521, 522, 546, 565, 568, 591, 596, 613, 622, 628, 630, 632, 658, 671, 674, 688, 701, 707, 710, 718, 741, 742, 753, 772, 785, 796, 807, 816, 820, 867, 876, 878, 889, 896, 900, 923, 946, 951, 961, 976, 983, 1000]
希尔排序结果为:
[6, 13, 16, 16, 31, 96, 102, 119, 123, 125, 140, 145, 158, 168, 183, 185, 198, 207, 210, 222, 224, 239, 241, 257, 258, 272, 287, 303, 304, 307, 308, 308, 315, 316, 321, 324, 327, 329, 332, 371, 374, 376, 383, 393, 406, 421, 426, 431, 432, 434, 441, 443, 455, 469, 484, 504, 508, 514, 521, 522, 546, 565, 568, 591, 596, 613, 622, 628, 630, 632, 658, 671, 674, 688, 701, 707, 710, 718, 741, 742, 753, 772, 785, 796, 807, 816, 820, 867, 876, 878, 889, 896, 900, 923, 946, 951, 961, 976, 983, 1000]
选择排序用时为: 0.000508069992065
快速排序用时为: 0.000910997390747
冒泡排序用时为: 0.000620126724243
直接插入排序用时为: 0.000463962554932
希尔排序用时为: 0.00741696357727
0
>>> print os.system('python BubbleSort.py')
第0轮:
[2, 3, 5, 7, 8, 6, 9, 1, 42, 54]
第1轮:
[2, 3, 5, 7, 6, 8, 1, 9, 42, 54]
第2轮:
[2, 3, 5, 6, 7, 1, 8, 9, 42, 54]
第3轮:
[2, 3, 5, 6, 1, 7, 8, 9, 42, 54]
第4轮:
[2, 3, 5, 1, 6, 7, 8, 9, 42, 54]
第5轮:
[2, 3, 1, 5, 6, 7, 8, 9, 42, 54]
第6轮:
[2, 1, 3, 5, 6, 7, 8, 9, 42, 54]
第7轮:
[1, 2, 3, 5, 6, 7, 8, 9, 42, 54]
第8轮:
[1, 2, 3, 5, 6, 7, 8, 9, 42, 54]
第9轮:
[1, 2, 3, 5, 6, 7, 8, 9, 42, 54]
冒泡排序之后结果为:
[1, 2, 3, 5, 6, 7, 8, 9, 42, 54]
python sorted()函数排序结果为:
[1, 2, 3, 5, 6, 7, 8, 9, 42, 54]
降序输出结果为:
[54, 42, 9, 8, 7, 6, 5, 3, 2, 1]
0
相当于Linux下直接使用python命令来执行程序了,还是很不错的体验。