我正在尝试在Android上使用Delphi 10执行命令行并获取命令的输出。
我正在使用此处的文件:
https://github.com/FMXExpress/android-object-pascal-wrapper/tree/master/android-23
这是我的代码:
uses Classes,
Androidapi.Helpers,
java.lang.Process, java.lang.Runtime,
java.io.OutputStream, java.io.InputStream,
java.io.InputStreamReader, java.io.BufferedReader;
procedure Execute(sCmd: string; sOut : TStringList);
var Process : JProcess;
Runtime : JRuntime;
Input : JInputStream;
BuffInput : JBufferedReader;
begin
Process := TJRuntime.JavaClass.getRuntime.exec(StringToJString(sCmd));
//Input := JInputStream(Process.getInputStream);
BuffInput := JBufferedReader(jInputStreamReader(Process.getInputStream) );
while (s = '') do
begin
s := JStringToString(BuffInput.readLine);
sOut.Add(s);
end;
//--- Compile but get Segmentation fault(11) at
// s := JStringToString(BuffInput.readLine);
end;
答案 0 :(得分:1)
感谢Ken White的好评,我更多地讨论了这个问题。
1:我需要使用Androidapi.JNI.JavaTypes而不是java.io.InputStream - >如果我使用java.io.InputStream
,则Input.available总是02:执行命令后,我需要执行Process.waitFor。我是客人,我不能像旧的dos那样有实时输出
3:如果有人知道更好的方法,欢迎您:P
const string pi = "pi";
var input = "7pi";
var containsPi = (input.IndexOf(pi) > -1)
var inputDecimal = Convert.ToDecimal(input.Replace(input, pi, ""));
if (containsPi ) inputDecimal = inputDecimal * Math.Pi;
var resultInDegreees = inputDecimal * 180.0 / Math.Pi;