我有一个python脚本,我正试图通过java代码运行它。
在我的ubuntu虚拟机上运行linux终端命令时,python脚本运行良好,使用的命令与通过java脚本传递的命令相同。
当运行一个不同的python脚本时,java代码运行得很好,该脚本的运行速度比我尝试运行的python脚本快。。
然而,尽管python脚本运行良好,java脚本运行良好,但不知何故,当我将两者放在一起时,什么都没有发生:txt文件没有更新,所以java脚本打印出它包含的任何旧值。
System.out.println("starting...");
try {
Process process = Runtime.getRuntime().exec("python3 /home/.../PycharmProjects/.../fraudanalysis.py abc def");
Thread.sleep(900000);
# Or try System.out.println(process.waitFor());
File file = new File("/home/.../PycharmProjects/.../output.txt");
Scanner newLineReader = new Scanner(file);
System.out.println(newLineReader.nextLine());
} catch(Exception e) {
System.out.println(e);
}
上面的代码应该在提供的绝对目录下使用两个参数运行python3脚本。python3脚本在大约13分钟后完成,并更新output.txt文件,然后java程序在等待15分钟后读取该文件(或者您可以告诉线程等待完成-- process.WaitFor()
退货 1
).
def testScript():
time.sleep(780)
return_string1 = sys.argv[1]
return_string2 = sys.argv[2]
outputFile = open(os.path.dirname(os.path.abspath(__file__)) + "/output/output.txt", "w+")
outputFile.write(return_string1 + " " + return_string2)
print("Python run complete")
if __name__ == "__main__":
testScript()
上面的脚本是python脚本的一个很好的替代品。如果您将python脚本的睡眠时间降低到10分钟,那么它将在java发送命令时运行。但是,在上面显示的休眠时间,java显然无法运行脚本,或者脚本运行尝试以失败告终。
附加信息:使用javafx按钮激活java命令。java脚本是用intellij idea开发的,python脚本是用pycharm创建的。
我的问题是,当两个脚本都能自己正常工作时,出现这个问题的可能原因是什么?
3条答案
按热度按时间bd1hkmkf1#
我只做了一点小小的修改就可以让它工作了。我使用了相对文件位置和timeunit.minutes.sleep(15);
这是我用的Python。
p4rjhz4m2#
作为一个简单的建议,您不应该依赖thread.sleep方法和固定参数,例如15分钟。您的数据可能会增长或收缩,这种处理方式效率低下。
你可以试着打电话给
Process.waitFor()
方法,以便在python进程结束时,线程继续。此外,你可以尝试使用
ProcessBuilder
这有时有助于面对有缺陷的系统执行案件。这里有一些代码。在
sub()
,您不能更改python程序,但sub2()
为了工作,您必须修改python程序,使其输出在标准out上,java将重定向到output.txt文件。w3nuxt5m3#
这是一个超时错误。无法修复。只需在java和python之间进行选择,并在其中编写所有内容。没有理由两者都用。