import subprocess
#obj = subprocess.Popen("adb version", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
obj = subprocess.Popen(["adb", "version"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
#obj.stdin.write("print('hello world')")
obj.stdin.write("\n")
#obj.stdin.write("print('hello python')")
obj.stdin.close()
cmd_out = obj.stdout.read()
obj.stdout.close()
#cmd_error = obj.stderr.read()
#obj.stderr.close()
print(cmd_out)
#print(cmd_error)
obj = subprocess.Popen("adb version", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True)
shell=True是必须的,如果你想操控adb。这一条是不对滴。
obj = subprocess.Popen(["adb", "version"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
用这个方式也可以.
文章针对shell的属性解释如下
python中的subprocess.Popen()使用 - 莫水千流 - 博客园
在*nix下,当shell=False(默认)时,Popen使用os.execvp()来执行子程序。args一般要是一个【列表】。如果args是个字符串的话,会被当做是可执行文件的路径,这样就不能传入任何参数了。
在*nix下,当shell=True时,如果arg是个字符串,就使用shell来解释执行这个字符串。如果args是个列表,则第一项被视为命令,其余的都视为是给shell本身的参数。也就是说,等效于: subprocess.Popen(['/bin/sh', '-c', args[0], args[1], ...])
"adb version", shell=true
等同于
["adb", "version"]
universal_newlines=True,如果你想使用"\n",这个属性是必须的。
|