我有一个在tomcat6中运行的servlet。我使用以下代码来执行命令 Ubuntu的 Runtime.getRuntime()。exec(“/ usr / bin / wine cmd / c some.vbs”); 问题是tomcat6运行程序为“tomcat6”用户, 以上java命令。所以上面的命令getErrorStream返回为 “wine:/home/randeel/.wine不属于你” 我使用用户“randeel”安装了“wine”。 有解决方法吗?
谢谢你, 蛙。
答案 0 :(得分:2)
是:您必须切换用户。尝试
Runtime.getRuntime().exec("sudo -U randeel /usr/bin/wine cmd /c some.vbs");
请注意,除非您另行配置,否则sudo
会要求输入密码。
另一个更优雅的解决方案是运行一个等待网络连接的randeel
服务器。然后它运行命令并通过网络连接返回输出。请参阅java.net.Socket
的文档。
答案 1 :(得分:0)
你有2个解决方案。 1.使用chmod a + x为wine赋予适当的执行权限。 2.如果您不想执行#1,则必须运行首先更改用户的命令行,然后运行该应用程序。 命令su USERNAME 更改当前用户但需要输入密码。要模拟键入密码的终端,您可以使用expect脚本。
然后您可以以不同的用户身份运行命令。如果您打算使用这种方式,我建议您编写执行这两个操作的简短shell脚本并从java运行此脚本。
#2更复杂。方式#1似乎更简单。