问题标签 [runtime.exec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
10135 浏览

java - 通过运行时进程在 Java 中调用 GnuPG 来加密和解密文件 - 解密总是挂起

注意:稍后再回来讨论,因为我找不到可行的解决方案。手动排空输入流而不是使用 BufferedReaders 似乎没有帮助,因为 inputStream.read() 方法会永久阻止程序。我将 gpg 调用放在一个批处理文件中,并从 Java 调用该批处理文件以仅获得相同的结果。一旦使用解密选项调用 gpg,输入流似乎变得不可访问,从而阻塞了整个程序。当我有更多时间专注于这项任务时,我将不得不回到这一点。与此同时,我将不得不通过其他方式(可能是 BouncyCastle)进行解密。

可能尝试的最后一个选项是调用 cmd.exe,并通过该进程生成的输入流写入命令......

我感谢在这个问题上的帮助。


我已经在这个问题上工作了几天并且没有取得任何进展,所以我想我会在这里寻求帮助。

我正在创建一个简单的程序,它将通过 Java 运行时进程调用 GnuPG。它需要能够加密和解密文件。加密有效,但我在解密文件时遇到了一些问题。每当我尝试解密文件时,该过程都会挂起。exitValue()总是抛出它是 IllegalThreadStateException 并且程序像它还在等待一样突然出现。这些方法的代码附在下面。该程序的最终目标是解密文件,并在 Java 中解析其内容。

我尝试了三种让 gpgDecrypt 方法工作的方法。第一种方法涉及删除 passphrase-fd 选项并通过 catch 块中的 gpgOutput 流将密码写入 gpg,假设它像通过命令行一样提示输入密码。这不起作用,所以我将密码放在一个文件中并添加了 -passphrase-fd 选项。在这种情况下,程序会无限重复。如果我通过 gpgOutput 流写任何东西,程序就会完成。打印的退出值的值为 2,结果变量将为空白。

第三个选项是 BouncyCastle,但我无法让它识别我的私钥(这可能是一个单独的帖子)。

我用来加密和解密的密钥是由 GnuPG 生成的 4096 位 RSA 密钥。在使用密码短语和密码短语文件的两种情况下,我都尝试将输出通过管道传输到文件> myFile.txt,但似乎没有任何区别。

以下是 gpgEncrypt、gpgDecrypt 和 getStreamText 方法。自从加密工作以来,我都发布了两者,并且我看不到加密和解密方法之间的执行和处理过程之间的任何明显差异。getStreamText 只是读取流的内容并返回一个字符串。

编辑:快速说明,Windows 环境。如果我复制解密命令输出,它可以通过控制台正常工作。所以我知道该命令是有效的。


0 投票
2 回答
376 浏览

java - Runtime.exec 打包在同一个 jar 中的应用程序(在 Win 中)?

我对 Java 非常陌生,并且正在努力实现以下目标(请原谅我对我违反的任何适当或已知的礼仪缺乏了解):

我创建了一个项目,有 2 个包;src.extsrc.utils
* src.utils包含我创建的主要 JFrame java 文件,以允许用户输入要运行的命令
* src.ext包含可执行文件

我想要做的是利用 Runtime.exec 将我从 JFrame 收集的参数发送到 src.ext 中的可执行文件

据我了解, Runtime.exec 通常只接受操作系统特定的 UNC 路径到可执行文件,但它也可以处理访问同一个 jar 中的可执行文件吗?如何?

谢谢你。

0 投票
3 回答
1230 浏览

java - 如何启动第二个 Java 进程?

如何独立启动第二个 Java 进程平台?理想情况下,它应该与当前运行的 Java 版本相同。是否有任何有用的系统属性?

0 投票
1 回答
1725 浏览

java - Runtime.getRuntime().exec(cmd); 在每次新执行时附加先前的输出?

我遇到了这个问题。我的程序在 Windows 平台上
调用。Runtime.getRuntime().exec(cmd);我读取了错误和输出流并对这个输出做一些事情。此方法每 4-5 秒循环调用一次,一直持续到程序终止。

现在会发生什么,每次我读取输出时,前一个输出都会附加到新输出中,因此每次迭代结果都会变得越来越大。有没有办法阻止这件事。执行的命令是带有一些过滤参数的“tasklist”。

我为此 Runtime.getTuntime().exec(cmd) 创建了一个方法(返回字符串输出),在该方法中,我也在执行后关闭进程,但是当从循环内调用它时,每次将先前的输出附加到新的那一个。

这是代码:

在类 fList 中是方法 pList:



你问了,所以我把所有的都复制到这里了。

0 投票
2 回答
2847 浏览

java - Runtime.exec() 无法运行“su - postgres -c 'pg_dump ...'”

这是我要运行的命令:

备份 postgres 数据库。

如果我现在在 linux shell 中,作为 root,它工作得很好。

但是现在,我想从 java 应用程序中运行它,如下所示:

它抛出一个错误:

现在我将代码更改为:

我现在该怎么办?

0 投票
1 回答
2643 浏览

android - 在我的应用程序中实时运行 dmesg 和 logcat 等 adb 命令

这是我想要完成的事情:我希望能够在我正在编写的应用程序中显示 dmesg 日志和 logcat 输出。我知道我应该使用 Runtime.getRuntime().exec(),但除此之外,我很迷茫。我试图找到一些例子,但找不到。

有人可以给我一些有关如何执行此操作的信息吗?也许指向我一些示例代码。除了在我的代码中执行以下操作:

或者

我不确定还可以做什么才能读取 dmesg 和 logcat 输出。

我还希望能够运行像“ls”和“cat”这样的命令

谢谢,

0 投票
3 回答
10436 浏览

android - Android Runtime.getRuntime().exec() 导航目录

所以我希望能够编写一个可以打开和显示 logcat 消息、dmesg 的应用程序,并且还能够运行诸如 'ls' 'cat' 'echo' 'cd' 之类的命令。

如果我执行以下操作:

我可以将文本“完整”放入文本视图并查看根目录。

然而,这就是我能做的。假设我想找到一个目录,然后换到它,我遇到了麻烦。

所以如果我这样做:

“完整”和“文本”我一无所获

有任何想法吗?

0 投票
1 回答
33517 浏览

java - 如何从 Java 运行 Mac OS 终端命令(使用运行时?)

我一直在寻找使用 Java 运行时运行外部程序的方法。这很好用,例如:

如您所愿创建一个新目录。现在,在 Mac 的 bash 窗口中,我可以这样写:

在名为 testgame 的文件夹上运行“Love”游戏引擎。现在,这个工作的原因是因为我已经别名'love'来调用love 可执行文件。我有一种感觉,这就是以下不起作用的原因

这也不是(对于那些想知道的人):

毫无疑问,这要么是我的一些 Java 白痴,要么与别名的工作方式发生冲突。我把它交给你可敬的智慧,所以!

更新:这也不起作用:

我收到的错误是运行时生成的进程中的 127。无论我在哪里研究它,我都将其视为“找不到命令”。

0 投票
4 回答
45954 浏览

java - 使用 System.setOut() 重定向 Runtime.getRuntime().exec() 输出;

我有一个程序Test.java:

这应该将 HelloWorld1 和 HelloWorld2 打印到文件 text.txt。但是,当我查看文件时,我只看到 HelloWorld1。

  1. HelloWorld2去哪儿了?是不是就凭空消失了?

  2. 假设我也想将 HelloWorld2 重定向到 test.txt。我不能只在命令中添加“>>test.txt”,因为我会得到一个文件已经打开的错误。那么我该怎么做呢?

0 投票
3 回答
45482 浏览

java - 如何在另一个java程序中编译和运行java程序?

我有一个 Main.java 和 Test.java 类,我想在 Test.java 代码中编译和运行 Main.java。这是我的代码

我只是在 Main.java 中打印“ok”,但这段代码不打印任何东西。问题是什么 ?