您的位置:首页 > 编程语言 > Python开发

代码中执行命令行-Python与Java版

2015-10-16 16:45 591 查看
这里的命令是指在开始-->运行里输的命令,如:ping www.baidu.com

要运行dos命令,如dir,直接在开始-->运行里执行会报错,此时需要调用cmd来执行dir,完整命令为:cmd /k dir

参数说明:

/k 表示执行完命令后不关闭cmd窗口
/c 表示执行完命令后关闭cmd窗口
/k或/c后还可以加一个start,表示在新的cmd窗口中执行后面的命令


一、不需要后续输入

以如下命令为例:

echo %path%


这是CMD下输出path环境变量的命令,以下代码都可以在Sublime Text控制台中输出结果:

Python代码:
import subprocess
r = subprocess.call(['cmd', '/k', 'echo',  '%path%'])

或者:

import os
s = os.system("echo %path%")

Java代码(略去try catch):
Process p = Runtime.getRuntime().exec("cmd /k echo %path%");
// 数据从进程流向本程序,从本程序的角度,是输入流
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String buff = null;
while((buff = br.readLine()) != null){
System.out.println(buff);
}
br.close();

二、需要后续输入

以如下命令为例:
adb shell
adb help
exit
第一行是进入adb shell,第二行是输出帮助信息,第三行是退出shell。这些命令需要你的电脑已经安装Android adb工具,同时连上手机或者启动了Android 虚拟机。

Python代码:
import subprocess
p = subprocess.Popen(['adb', 'shell'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, err = p.communicate(b'adb help\nexit\n')
print(output.decode('utf-8'))


Java代码(略去try catch):

Process process = Runtime.getRuntime().exec("adb shell");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.write("adb help\nexit\n".getBytes());
os.flush();

int result = process.waitFor();

StringBuilder successMsg = new StringBuilder();
StringBuilder errorMsg = new StringBuilder();
BufferedReader successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String s;
while ((s = successResult.readLine()) != null) {
successMsg.append(s);
}
while ((s = errorResult.readLine()) != null) {
errorMsg.append(s);
}

os.close();
successResult.close();
errorResult.close();
process.destroy();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: