繁体   English   中英

获取 bufferedReader.readLine() 值为 android 中的 null

[英]Getting bufferedReader.readLine() value is null in android

工作条件:

Process process = Runtime.getRuntime().exec("ls -l /etc/");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
Log.d(TAG,"bufferedReader.readLine()===>"+bufferedReader.readLine());

截断日志:bufferedReader.readLine()===>total 7580

不工作:

Process process = Runtime.getRuntime().exec("./etc/lighttpd -D -f /etc/test.conf");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
Log.d(TAG,"bufferedReader.readLine()===>"+bufferedReader.readLine());

截断日志:bufferedReader.readLine()===>null

你能帮我吗,为什么我在执行“./etc/lighttpd -D -f /etc/test.conf”命令时收到 bufferedReader.readLine() 为“null”

在设备 shell 中执行以下命令:

#./etc/lighttpd -D -f /etc/test.conf
2022-08-30 12:38:18: server.c.1508) server started (lighttpd/1.4.58)

/etc/lighttpd通常是一个包含配置信息的目录。 /etc/lighttpd通常不是可执行文件。

路径名./etc/lighttpd是可疑的,但您向我们展示的证据证明:

  1. 它存在,并且
  2. 它是可执行的,

...至少对于某些当前目录。

为什么我说它被证明了? 因为:

  1. exec没有抛出IOException ,并且
  2. 您向我们展示了 output 从命令行运行相同的命令。

诚然,当前目录可能不同……这也是我说./etc/lighttpd可疑的原因之一!


因此,如果问题不在于./etc/lighttpd不是可执行文件,那么bufferedReader.readLine()返回null的解释是什么。

好吧,最简单的理论是lighttpd正在写入标准错误而不是标准 output,并且它已经关闭了其标准 output。 这将解释您所看到的行为。

无论如何......我的建议是:

  1. ./etc/lighttpd更改为您正在使用的可执行文件的绝对路径名...以消除任何疑问。
  2. 尝试从process.getErrorStream()打开和读取。
  3. lighttpd日志文件中查找任何错误。

最后,您已经用[android]标记了您的问题,但 AFAIK 没有用于 Lighttpd 的(官方)Android 端口。 我猜这个标签是一个错误,因为没有其他提到 Android。 但如果这不是一个错误,你应该告诉我们你的 go Android 端口来自哪里。 可能有助于人们诊断问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM