import subprocess
import os
1. 如果你的应用使用的是Python 3.5及以上的版本:
subprocess.run()
默认参数shell=False,m1和m2等同,m3会报错,默认参数univer
-
m1=subprocess.run(['ls','/home/liq_test'],stdout=subprocess.PIPE, stderr=subprocess.PIPE)
-
m2=subprocess.run(['ls /home/liq_test'],stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)
-
m=subprocess.run(['ls /home/liq_test'],stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True,universal_newlines=True)
-
print(m1)
-
CompletedProcess(args=['ls', '/home/liq_test'], returncode=0, stdout=b'hello.txt\nworld.txt\n你好\n', stderr=b'')
-
print(m)
-
CompletedProcess(args=['ls /home/liq_test'], returncode=0, stdout='hello.txt\nworld.txt\n你好\n', stderr='')
注意m.stdout.strip()的结果是bytes, 想str类型需要decode(m.stdout.strip(),"utf-8") 得到输出的值,但我看报错了所以还是universal_newlines=True这个吧
2. 如果你的应用使用的Python 2.4以上,但是是Python 3.5以下的版本:
-
m=subprocess.call(['ls /home/liq_test'],shell=True,universal_newlines=False)
-
hello.txt world.txt 你好
-
print(m)
-
0
-
n=subprocess.check_output(['ls /home/liq_test'],shell=True,universal_newlines=False)
-
print(n)
-
b'hello.txt\nworld.txt\n你好\n'
3. 新老使用对比
-
m=subprocess.call(['ls','/home/liq_test'])
-
m=os.system('/home/liq_test')
-
0
4.
新老使用对比
-
m=subprocess.getoutput('/home/liq_test')
-
m=os.popen('/home/liq_test').read()
-
print(m)
-
'hello.txt\nworld.txt\n你好\n'
5.
subprocess.run()、subprocess.call()、subprocess.check_call()和subprocess.check_output()都是通过对subprocess.Popen的封装来实现的高级函数,因此如果我们需要更复杂功能时,可以通过subprocess.Popen来完成。
参考:https://blog.csdn.net/qdPython/article/details/127689439
阅读(205) | 评论(0) | 转发(0) |